World's thinnest fully standalone DIY computer - 2mm!!
To make the experience fit your profile, pick a username and tell us what interests you.
We found and based on your interests.
ELLO_LC1_Schematic.pdfAdobe Portable Document Format - 150.39 kB - 09/25/2022 at 12:47 |
|
|
The release version PCB of ELLO LC1 finally arrived, and although it can't be seen on the picture, the manufacturing quality is *amazing*!
Here are also a few pictures (with my old prototype) showing the pre-loaded content on the ..."hard drive" :) The usual "Hello World" thingy, a port of the Grain benchmark, and a simple walk-through-maze game.
Which assembling another ELLO LC1, I decided to push my luck and skip the six capacitors, normally needed for the operation of the LCD. It lives!! A second test - lives again! I am not observing any reduction in the quality of the displayed text.
Turns out, ELLO LC1 can operate with ONLY THREE COMPONENTS (plus battery, of course) - PIC18, LCD, and the reset button, which is important to turn the system on or off.
Just FYI to all who may want to assemble one of these :)
Release candidates of LC1 just arrived.
The bottom side is with a lot of exposed ground copper now, because it turns out it massively improves the performance of the touch keyboard.
Also, the battery hole is now a bit smaller, and the soldering rings for the capacitors - a bit wider.
All looks fine but need to assemble one for test anyway.
Finally managed to track down and fix a nasty memory leak which was happening when using string constants. Took a week, this thing alone!
Below is the list of currently supported keywords and what is left to do to full release:
Bitling BASIC interpreter
' comment until the end of the line
=== Data types
INT (also INTEGER for compatibility)
REAL (also FLOAT for compatibility)
STRING
=== operators
+ - * /
// or MOD ' modulo
^ ' power
<< ' shift left
>> ' shift right
= ' (in statements) attribution
== or = ' (in expressions) compare for equal
<> ' compare for not equal
< <= => >
AND OR XOR
=== variables
VAR <type> <name> { [dimension [, dimension...] ] } { , <name> ... }
' DIM is alias to VAR for backward compatibility
examples:
var int a, b[3,3]
var real x, z[10,10,10]
var string s[5] ' array of five zero-terminated strings
' () are also supported in variable indexes instead of [] for backward compatibility
=== control structures
IF <expression> THEN
{ ELSE }
END IF or ENDIF
FOR <variable> = <expression> TO <expression> { STEP <expression> }
NEXT { <variable> }
WHILE <expression>
END WHILE or WEND
REPEAT
UNTIL <expression>
CONTINUE ' valid for FOR, WHILE, and REPEAT structures
EXIT ' valid for FOR, WHILE, and REPEAT structures
LABEL <label_name>
GOTO <label_name>
END
' STOP is also supported and act the same way as END
=== subroutines
SUB <name> { ( <type> { @ } <variable> { , <type> ... } ) }
FUNC <name> { ( <type> { @ } <variable> { , <type> ... } ) } { AS <type> }
RETURN { variable }
END SUB or ENDSUB
GOSUB <sub_name(...)> ' optional calling format for subs
examples:
sub test1
func average(real a, real b) as real
sub store1(int x, int y, int @arr)
=== commands
PRINT { expression { , expression ... } }
DATA expression { , expression ... }
READ variable { , variable ... }
REWIND ' return to the first DATA element
POP ' remove one return address from the stack
POKE <addr, val
RESET ' restart the system
SLEEP ' put the system to sleep
INKEY variable
GET variable { , variable ... }
INPUT variable { , variable ... }
CLS
HLOC <column>
VLOC <row>
PUTCH <ascii>
DEFCH <chrcode> <byte1> <byte2> <byte3> <byte4> <byte5> <byte6> <byte7> <byte8>
SELCHT < 1, 2, or 3 >
CURSOR < bit.0 blink, bit.1 enable >
SCROLL < bit.0 up, bit.1 down, bit.2 left, bit.3 right >
TDREF ' refresh the text display (used after direct writes into TD RAM)
WAIT <milliseconds>
=== functions
RND (val) ' parameter other than 0 first seeds the generator with the value
ABS (val)
ROUND (val)
TRUNC (val)
FRACT (val)
LOGN (val)
LOGD (val)
EXP (val)
SQR (val) ' square root
CBR (val) ' cube root
SIN (val)
ASIN (val)
HSIN (val)
COS (val)
ACOS (val)
HCOS (val)
TAN (val)
ATAN (val)
HTAN (val)
COTAN (val)
FREE () ' return the largest free block in memory
TDRAM () ' return the text display RAM address
TDTDT () ' text display width
TDHGT () ' text display height
PEEK (addr) ' 0 and positive numbers: RAM address, negative numbers: ROM address-1
ASC (str) ' character (first in string) to ASCII
CHR$ (val) ' ASCII to character (one-character string)
VAL (str) ' string to number
STR$ (val, d) ' number to string; "d" specifies the number of digits after decimal point
LEN$ (str)
LEFT$ (str, count)
RIGHT$ (str, count)
MID$ (str, start, count)
INSTR (substr, str, start)
TIMER (value) ' read system millisecond incremental counter; any value different than 0 first loads the counter
=== TODO:
CLEAR [ ALL or var [ , ... ] ] ' undefine variables
work with files
OPEN <filename> as #<variable>
PRINT #<variable> , .....
INPUT #<variable> , .....
GET #<variable> , .....
CLOSE <variable>
IO port
UART
PWM
ADC
DAC
When I was designing this board, in fact I designed three different boards - LC1 (this one) with PIC18, LC2 with AVR-DA or -DB, and LC3 with PIC24. Since I have no experience writing for AVR, and that's why started the software with this one, and porting to the PIC32 should not be a big task either. Not completely sure about the AVR one, though.
Will release all the three at the same time soon.
Create an account to leave a comment. Already have an account? Log In.
https://hackaday.io/project/193509-smartwatch-10-years-ultra-long-battery-life
meybe joining ideas? Small, thin, programable, solar panel , clock
nice interpreter https://github.com/philhassey/tinypy
Very nice project.
is possible increase memory to 512KiB and add a way to share data? (irda usb)
Meybe add small solar panel? Like a old calculators.
BTW. Is possible change the font? I need some asci art glyphs
what's the size ? are you really under a credit card size for the width and lenght ? Congrats !
109x84mm, so just about two card next to each other on their long sides. Any smaller would make it practically unusable
Very impressed with this project. Love the simple target - too many of these projects can turn into much more complex beasts. I'm particularly fond of the capacitive keyboard. My project had been using the CardKB keyboard over an I2C interface but it's awful to type on. Looking forward to the PCB files and other documentation being released when you're happy with it.
You got HaDed ! https://hackaday.com/2022/10/04/you-cant-be-too-rich-or-too-thin-a-2mm-thick-computer/
Oh a PIC32 + graphical would be _even_ better (the more ram/flash the better). Would you be selling this in any form (complete, kit, pcb, ...)? I'm definitely interested.
I already have that but the software for it is not ready. Will present when it is finished. Of course, it is with different goals and not as simple as this one
Yes, quite well. Of course, not very suitable for fat fingers :)
A beautifully minimalist design.
Flexible epaper might be a more robust display and perhaps thinner, than glass lcd.
https://www.waveshare.com/2.9inch-e-paper-d.htm
I am aware of thinner panels, but none are with their own pins, and all require connector
e-ink is slow, very slow. Here is slow cpu
slow+slow = 4*slow
If you have a slow cpu, then it really doesn't matter if the display is slow too. EINK displays have hugely varying update times, that one is "fast" at 2 secs for a full update. The upside is far less current if your application wants an always on display, with low update rate.
@crun make experiment and check, You will be suprise.
no e-ink is not good options
can You show example?
simple print text when i use one key
Sorry, I am not sure I understand what you mean. An example of program?
better than https://hackaday.io/project/181296-hp15c-calculator-emulator
and https://hackaday.io/project/169140-blinkencard-pocket-altair-8800
but idea fuzix on this device is very good
definitely hackers sidekick
nice, very nice
add solar panel like this https://hackaday.com/2020/09/11/game-boy-plays-forever/
First thing I thought of was a thin 4 function calculator I used to have that ran off of a small solar panel on it. Something like this with a Basic interpreter like that would be amazing. Solar or ability to use a wireless charger would be neat too.
The solar panel would not increase too much thickness than the screen. Emergency charging from AA batteries using a cable (step up/down 0-12V converters ideal).
But with such potential one would still want 'to do', calendar or other functions. Such a hacker travel kit would be it, even if it were 5mm thick
https://liliputing.com/freewrite-alpha-portable-writing-device-ships-in-july-2023-hits-indiegogo-for-249-and-up/
can You create graphics screen and mechanical keyboard?
38h working time ! Wow, i need it.
how long this device work? You are planing simulation, put key, show information, and aproximate working time ?
About 38 hours active work and 3+ years on standby. The battery can be recharged via the side IO port.
I have made the holes slightly tighter than what they normally should be, in order to provide good contact with a header inserted into it
Would it fit an inverter to power the computer (and charge too) from AA batteries ? or from 3.7V 18650
A 18650 battery holder could be glued on the back side and connected to the power pins on the IO connector, but then it won't be 2mm thick
battery holder ;) why put it? You only must put 2 metal hole + and -
step up from 1V to 5V not only 3V or 3.7V
it fit to solar panel or any AA battery
How does this device communicate with the world? It would probably be difficult to make 2d barcodes (for example, QR some watch uses this idea, bringing screen and read diode) on this display. But irda is something to consider. Of course, turned off so it wouldn't consume power.
However, with this approach and a small amount of current, it is worth considering a solar panel, however minimal.
I would also add a hole to be able to carry it on a string or screw it to something.
Is it possible to change the fonts in the display? Not everyone uses English, some people need different letters.
Would it be possible to fit a linear button, something like a slider. Something that you can precisely set a certain value. Let's say you move your finger left and right (or in a circle) and you can set values from 0 to 1.
E.g. the brightness of the screen or enter data like this.
It reminds me most of the old rex pcmcia https://en.wikipedia.org/wiki/REX_5000 . So I suggest adding 4 more buttons on the side of the screen to select menu items.
Right now, the computer can send and receive files through XMODEM protocol at two pins on the IO connector.
The DOGM204 display supports also Japanese and Cyrillic fonts (see documentation) which can be selected from within the BASIC. I am planning to make in the future similar design but with a graphic panel, but that's for the future.
The other suggested ideas are good. Will consider what can be realistically added to a next version.
thanks,
(in my opinion irda is more popular and elegant way: tv pilot, usb dongle to laptop, meybe exist thin led (the light opposite side from the keyboard))
First congratulations on a beautiful idea. A graphical LCD would be *much* nicer IMO (would be an insta-buy for me). How does the keyboard work? The schematics suggest they are switches but they look captive. Could you give a bit more detail? Thanks.
Re: the graphical - the next version will be with one for sure. This one was more of a proof of concept version.
The keys are areas of exposed trace. Initially I wanted to make a piece of conductive rubber to cover the keyboard as in the calculators, but then decided to leave it as it is. That's why the keyboard software consists of two parts - resistive scanning and (sort of) capacitive scanning, where I measure capacitive disturbance in ungrounded ADC inputs. This is completely in software since the PIC does not have a capacitive controller.
Become a member to follow this project and never miss any updates
If you add support for typing input in Hebrew - it will be greatly appreciated. I personally look forward to you if you could update me on my question.