Close
0%
0%

Pocket Arduino Microcomputer

Pocket microcomputer on an Arduino with user input and LCD display. The OS implements a file system and code editor and executor

Similar projects worth following
Using parts that I have lying around, I want to create a small handheld device that allow me to write some simple code and run it. It currently has a 16 buttons keypad as input, a LCD screen as output, will maybe store files on an SD card or eeprom. I'm implementing a custom file system, a file browser, a code editor and a code executor.

Hardware

Controller

This device is controlled by an ATmega328P programmed on an Arduino Uno for prototyping. It will be detached from the board on later stages of development.

I/O

User input comes from a 16 buttons membrane keypad. Software currently only supports a single button pressed at a time, it will be improved when new functionalities will be added.

The output is a simple 16 character × 2 lines LCD display.

Peripherals and pins

The buttons and the display are connected directly to the Arduino board for now. I will later use chips like serial registers to free some I/O pins.

Storage

Data and file storage is kept in MCU's RAM for now. I'm currently working on using the microcontroller's internal EEPROM but it will ultimately be stored in an external EEPROM or SD card.

File browser example

Software : Operating System and Code Execution

The Operating System programmed on the controller implements a fully custom file system, a file browser, a code editor and a code executor. The whole Arduino project is available freely on my github, I'm always working on it.

Task Resources

The microcontroller's dynamic memory can store 2048 bytes of data. Let's say half of that is used by the operating system itself, then 1024 bytes can be used as user memory for programs. I want programs to be able to call other programs, to use them as functions for example. Programs will be able to allocate chunks of memory within these 1024 available bytes.

Task Abilities

Programs can use the kernel for certain operations using system calls :

  • Input using buttons
  • Output using the screen display
  • Input/Output using on-board pins (or maybe serial registers)
  • File access (not yet implemented)
  • Execution of other programs (not yet implemented)

Emulated Programming Language

Programming language is based on Instruction List (IL). General instructions are written in uppercase whereas system calls are written in lowercase.

I programmed most of the instructions and I've been able to execute simple programs with arithmetics, logic, and interracting with the screen display and the buttons.

I often change my mind about how the device works. Latest details about the operating system are available on the project's Github, in the docs folder on the dev branch. 

Read more »

  • 1 × Arduino Uno
  • 1 × 16x2 LCD Display LD1602ZFA
  • 1 × 4x4 buttons Keypad
  • 8 × Jumper wires M/M
  • 16 × Jumper wires M/F

  • It's Aliiive !!!

    Nathan12/30/2022 at 16:56 0 comments

    I've been working on the code executor for a few days and I've made wonderful progress. I can now execute a program written on a file and most instructions are implemented and working fine. It's thinking ! 

    But now I'm encountering a bit of an issue : I'm still emulating my file system in the microcontroller's RAM, and it has become tedious to write my programs by hand in the Arduino code and then uploading it to have my files updated. I'd like to make it a little more interractive by being able to write programs directly on the device. So I will be focusing on that for the next updates.

    And what did I just learn !?

    I've been playing with my cutesy little Arduino for years now and I can't believe I discovered just a few days ago that there is a builtin EEPROM in the Arduino that can be used very easily with just a small library. That could have been useful years ago !

    So I will put my files onto the builtin EEPROM and enjoy a real non-volatile file system !

  • Log : Designing Kernel

    Nathan11/29/2022 at 17:35 0 comments

    Ok, I had a bit of fun writing drivers for the buttons and the display, I created the file system (still not writable though). Now I'd like to start programming the operating system's kernel.

    I updated the description on this page with a first idea of how I will program and plan to use the kernel. More details are on my github in the 'docs' directory on the 'dev' branch.
    Feel free to give me advice while I'm developping it.

    Thanks for reading !

  • First Commit !

    Nathan11/05/2022 at 09:00 0 comments

    First publication of this project on Hackaday! Yay!

    What is already done :

    • I've written libraries for the keypad input and LCD output.
    • The file system is readable but there is no write function yet.
    • I've created a small file browsing menu.

    What is next :

    • I will continue to work on the file system (basic write functions).
    • I may already have everything I need to make a file reader, so that's that.
    • I will have to develop a custom programmation language that can be written with the very simple interface that I have.

    Ideas for the future :

    • The storage is currently on the Arduino RAM for prototyping, it will later be put onto an SD card reader or EEPROM.
    • I will have to think about how to make the frame to hold all the components / circuit boards. The final system will be soldered on either a prototyping board or a PCB.
    • Use logic gates to control peripherals to free some I/O pins for general use. 
    • I'll add a power supply, someday.

    I will also work on documenting my project and keeping you updated in the same time.

    Thanks for stopping by and reading !

View all 3 project logs

Enjoy this project?

Share

Discussions

Tachion wrote 11/03/2022 at 17:52 point

handheld need long time working on one charge

  Are you sure? yes | no

Nathan wrote 11/03/2022 at 20:46 point

Yeah... I've never really worked with batteries before but I guess I'll figure it out, but I don't plan on adding one right now.

A controller and an LCD display probably won't draw much current though...

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates