Wellys Dev

  • Home
  • Search/Topics
  • Writings
  • About

    2024

  • 2024-07-23
    Developing in C for the ATmega328P: A Second Serial Port

    Where I discuss in detail, adding a second serial port to the Uno, soft_serial, and how to use it.

    Introduction

    While I was developing code for a robotic arm, I realized it would be best, if I used one serial port for communicating with the arm and another serial port to accept commands for the arm. Thus I created a second serial port, called soft_serial.

    The port didn’t need to be fast, as it would be used as a communication link between someone on a keyboard and the Uno. It needed to do the following:

  • 2024-07-19
    Developing in C for the ATmega328P: Better Serial Input

    Where I discuss how to improve on the serial input of C and the ATmega328P and adding a second serial port, soft_serial.

    Introduction

    In the example serialio_string (code on GitHub or below), I demonstrate the problem with reading text from the serial port. If you use scanf(), it appears to work well, except you can easily over-run the buffer. For example, the program asks for “up to 7 char”, however, it will accept as many as you are willing to type. More than likely, after about 20 characters, the microcontroller will crash.

  • 2024-06-11
    Developing in C for the ATmega328P: Raspberry Pi and VS Code Setup Part 3

    Where I demonstrate how to use additional tools such as the serial monitor, tio, along with VS Code on your PC to develop code on your Raspberry Pi for the Arduino Uno (ATmega328P).

    Introduction

    Even though VS Code has a serial monitor, in fact, in has many serial monitor extensions, I’ve found tio to be the best. The VS Code version has failed to connect too many times, while tio has been rock solid. It also has a nice configuration method and is easy to connect/disconnect.

  • 2024-06-09
    Developing in C for the ATmega328P: Raspberry Pi and VS Code Setup Part 2

    Where I demonstrate how to use VS Code on your PC to develop code on your Raspberry Pi for the Arduino Uno (ATmega328P).

    Introduction

    Now that you have the best setup for developing code for the Arduino Uno, how do you use it?

    Links for Reading

    Know

    • Learning the Command Line
    • Editing Remotely Using VS Code
    • Developing in C on the AVR ATmega328P: Frequently Asked Questions (FAQ)
    • Developing in C on the AVR ATmega328P: Frequently Found Errors (FFE)

    Good to Know

    • Remote Development using SSH
    • VS Code User Interface
    • Working with the Command Line

    Two programs

    You will be using two programs on your PC to interact with the Raspberry Pi, VS Code and your terminal program (Windows Terminal, macOS Terminal/iTerm/Warp) also known as your CLI. The former is your coding environment and the latter provides administrative capabilities along with some applications like a serial monitor (tio).

  • 2024-05-05
    Developing in C for the ATmega328P: Raspberry Pi and VS Code Setup Part 1

    Where I setup the Standard C tool chain for the ATmega328P on the Raspberry Pi, however I use VS Code on my Mac (or Windows) for development and connect via SSH to the Raspberry Pi.

    Introduction

    This is the best setup, period. Why? It provides the most simple tool chain installation, a stable, known platform and enables hardware debugging, should you want to do so.

    Linux has always been the preferred platform for open-source embedded development, as the Standard C tools are native to Linux. macOS is second, as its Unix bloodline, enables it to resemble a Linux system quite easily. Windows is a distant third, as the hoops to jump through to build the tool chain are a pain (Note: WSL2 still can’t easily interact with the serial port).

  • 2024-04-24
    Developing in C for the ATmega328P: Make, Makefile and env.make

    Updated: Where I discuss a simplified approach to development automation using make in AVR_C, add the ability to use Arduino tools.

    Introduction

    The previous explanation provided the Makefile from Elliot Williams and can be viewed here. I have made several significant changes to the file since:

    • moved the device programming setup to env.make at the root folder
    • use one Makefile at the root folder then use “include ../../Makefile” in the file makefile, which is in each of the examples in the examples folder
    • added a DEPTH variable to each local makefile (the one in the examples folder)
    • removed some of the targets to simplify the file
    • added additional targets which help explain the make options, including make help
    • Added two variables, which allow you to use either the Arduino toolchain or the avr-gcc toolchain, OS and TOOLCHAIN

    Here are detailed instructions as to how to use make, the Makefile and env.make to configure and execute your development process.

  • 2024-04-01
    FlashForth: Execution Speed

    Where I discuss the various methods of increasing execution speed in Forth and demonstrate the ease in doing so.

    Introduction

    In this entry, I showed the relative speeds of board/language combinations from a ARM M0 running CircuitPython to a Pi Pico running C. While execution speed is important in embedded microcontrollers, development speed is equally important along with ease of development. A great attribute of Forth is its ability to combine all three. In this entry, I’ll show how you can start with a simple, fast example and make it significantly faster without great difficulty.

  • 2024-03-22
    FlashForth: Debouncing Buttons -

    Where I discus debouncing buttons in Flashforth as well as indexing arrays.

    Introduction

    Elliott Williams had a great post several years ago as to the best solution to debouncing buttons. The technique worked extremely well in C, and I wanted to attempt it in Forth. It actually works better in Forth, as Forth easily handles the 16-bit data to de-bounce properly. I’ll work through the technique in FlashForth as well as spend some time at the end as to the execution timing of the technique.

  • 2024-03-13
    FlashForth: Compile a New Version

    Where I describe in detail how to compile a new version of FlashForth.

    Introduction

    Its helpful to be able to compile a new version of FlashForth. A simple reason is to increase the baudrate from 38400 to 250000, increasing your productivity. It isn’t difficult, however the tool chain can be a bit complex.

    Requirements

    You will need to install both the MPLAB IDE and the XC8 compiler for this exercise. You will also need a hardware programmer such as the Atmel ICE or Microchip SNAP. And finally, you will definitely need the source code of which to compile, Flashforth on github.

  • 2024-03-12
    FlashForth: Hardware Abstract Layer (HAL)

    UPDATED: This page contains a both a Forth hardware abstraction level (HAL) much like the m328def.inc file for AVR programming in C and an example of debouncing buttons.

    New Words

    This HAL provides the words:

    I/O Words

    The Arduino pins are defined by bit port so one can use the following commands using the Arduino pin number. This is true for pins D0-D13.

    high    ( bit port -- )     set a Arduino pin high
    low     ( bit port -- )     set a Arduino pin low
    toggle  ( bit port -- )     toggle output value on an Arduino pin
    output  ( bit port -- )     set Arduino pin as output
    input   ( bit port -- )     set a Arduino pin as input
    pullup  ( bit port -- )     set Arduino pin as input_pullup
    read    ( bit port -- f )   read a Arduino pin, returns bit value
    

    For example:

Page 1 of 8
Copyright © 2025 Lief Koepsel
  • Home
  • Search/Topics
  • Writings
  • About