Forum: Projekte & Code AVR-ChipBasic8 - BASIC-Computer mit ATMega 8/16/88


von Joerg W. (joergwolfram)


Angehängte Dateien:

Lesenswert?

Nachdem das Ganze jetzt schon recht weit gediehen ist, hier schon mal
ein Preview auf die Mega8/Mega88 Version. Es funktioniert auch mit
einem Mega16 auf dem "normalen" ChipBasic Board. Was ging, habe ich
mit reingepackt und das ist eine ganze Menge geworden. Auch wenn der
Quellcode teilweise recht unübersichtlich geworden ist, wird das
Ganze doch OpenSource bleiben. Allerdings werde ich nicht mehr an
der Kompatibilität zum AVR-Studio arbeiten, da das mit der extensiven
Nutzung der AVRA-Makromöglichkeiten und meinem Bibliothekskonzept
wohl nur schlecht vereinbar ist.

Hier schon mal ein paar Features:

- Läuft auf Mega8, Mega88 und Mega16 auf dem ChipBasic-Bord (16MHz)
- 20 Programmzeilen mit maximal 25 nutzbaren Zeichen, Fullscreen-Editor
- 1 Programm im internen Flash
- Tiny-Basic ähnliche Programmiersprache mit Erweiterungen
- Variablen und Arithmetik mit 8 Bit
- 30x23 Zeichen normal und invers, Pseudografik
- Punkte, Linien, Rechtecke un gefüllte Rechtecke
- Autorun-Modus über Jumper einstellbar
- PS2-Tastatur zur Eingabe (Klammeraffe ist auf Shift+3)
- 1-Kanalige Audioausgabe (Noten, Rauschen) mit Hüllkurve
- serielle RS232-Schnittstelle mit 1200 Baud und Ladungspumpe
- 4 Pins als I/O und Analogeingänge
- optionales Disk-EEPROM (24C16) speichert 4 Programme
- Up/Download von Programmen über die serielle Schnittstelle
- Tastenkombinationen für Abbruch, Neustart, Screenshot

Das Hexfile für den Mega16 folgt im nächsten Post, alle anderen müssen 
noch
ein paar Tage warten, da ich den Mega8 zumindest in den Grundfunktionen 
noch testen muß und auch die Doku noch nicht vollständig ist.

Gruß Jörg

von Joerg W. (joergwolfram)


Angehängte Dateien:

Lesenswert?

Dazu noch schnell die verwendbaren Keywords:
1
?                Bildschirmausgabe  @Y,X %ascii
2
CLS              löscht den Bildschirm
3
GO n             bei n>20 Programmende
4
SUB n            entspricht GOSUB
5
RET              RETURN
6
FOR TO
7
NXT              NEXT
8
CO               Color 0/1, bei +8 wird auf Großschrift umgeschaltet
9
PL y,x           PLOT
10
DR Y1,X1,Y2,X2   DRAW
11
BX Y1,X1,Y2,X2   BOX
12
FBX Y1,X1,Y2,X2  Filled BOX
13
SCR n            Scroll in Richtung 0(nach oben)..3(nach links)
14
SY n             Sync auf TV vertikal
15
INP V            Input variable
16
VID              Videoausgabe aus(0)/ein(1)
17
OUT n            Ausgabe auf freie IO (Bit 0..3)
18
DIR n            Richtungsfestlegung IO (Bit 0..3, 0=in 1=out)
19
IF cond          wenn cond=false wird zur nächsten Zeile gesprungen
20
LIM V min max    begrenzt die Variable V auf den Bereich min..max
21
PUT n            gibt Zeichen auf serielle Schnittstelle aus
22
GET V            liest Zeichen von seriell in Variable V ein
23
NO n             gibt Note (n=0..63) oder Rauschen (n=255) aus
24
POK a,d          schreibt in das interne EEPROM
25
INV V            V wird in Zweierkomplement (-V) umgewandelt
und die Funktionen:
1
CF(n)            "Kollisionsflag", n wird ignoriert (s.u.)
2
RV(n)            Zufallszahl zwischen 0 und n-1
3
AD(n)            Analogwert von IO-Pin 0-3
4
IN(n)            Digitalwert (0/1) von IO-Pin 0-3
5
NO(n)            gibt das Einerkomplement (alles invertiert) zurück
6
KY(n)            Tastaturfunktionen (s.u.)
Das Kollisionsflag wird bei jedem PRINT gesetzt, wenn ein Zeichen 
überschrieben wurde, desssen Zeichenwert nicht ohne Rest durch 16 
teilbar ist.
Der Rest des zuletzt überschriebenen Zeichens wird zurückgegeben.
1
KY(0)    liefert den Keycode der aktuell gedrückten Taste (0 wenn keine)
2
KY(1)    wartet auf Tastendruck und liefert Keycode zurück
3
KY(2)    links SHIFT gibt 1, links CTRL gibt -1 (255) zurück, ansonsten 0
4
KY(3)    rechts SHIFT gibt 1, rechts CTRL gibt -1 (255) zurück, ansonsten 0
5
KY(4)    rechts CTRL gibt 1, links CTRL gibt -1 (255) zurück, ansonsten 0
6
KY(5)    rechts Pfeil gibt 1, links Pfeil gibt -1 (255) zurück, ansonsten 0
7
KY(6..)  wartet auf ENTER-Taste und liefert 0 zurück

Gruß Jörg

von Joerg W. (joergwolfram)


Angehängte Dateien:

Lesenswert?

So, das Paket ist geschnürt und auch die Homepage ist aktualisiert:

http://www.jcwolfram.de/projekte/avr/chipbasic8/main.php

Viel Spaß damit

Jörg

von Reiner Z. (rzett)


Lesenswert?

Hallo Jörg,

Danke,ich werde bestimmt viel Spaß mit dem kleinen Basic haben.
Allerdings habe ich ein Problem damit:
Ich habe die Datei mega8.hex in einen ATMega8 geladen, eine kleine
Lochrasterplatine gelötet und das Basic gestartet.
Alles funktioniert, außer der Addition; sobald der Interpreter
auf ein Plus(+)zeichen trifft wird das Programm mit einem
EXPR ERROR beendet. Kannst Du mir einen Tipp geben oder hat die Version 
0.35 für den ATMega8 noch einen Fehler. Ich bin mir auch nicht sicher ob
die Operation > bzw. < richtig funktioniert. Da es gestern Abend sehr 
spät
geworden ist war ich zu müde um es noch zu testen.
Danke für Deine Antwort.

Viele Grüße

Reiner

von Joerg W. (joergwolfram)


Lesenswert?

Hallo Reiner,

hast Du mal die Beispiele probiert? Die enthalten Additionen sowie 
Vergleiche und haben eigentlich funktioniert.
Mal sehen, ob ich heute oder morgen zum Nachschauen komme, aufgrund
fehlendem Feedbacks habe ich das Projekt nicht weiterentwickelt,
Version V0.35 ist immernoch aktuell.

Gruß Jörg

von Reiner Z. (rzett)


Lesenswert?

Hallo Jörg,

ja, die Beispiele "Autorennen" und die "Anzeige des kompletten
Zeichensatzes" habe ich zuerst ausprobiert. Dabei ist es mir 
aufgefallen,
dass es nicht funktioniert. Ich habe dann ein kleines Programm 
geschrieben das mir die Summe von zwei Zahlen ausgibt; funktionierte 
nicht. Wenn
ich das + durch ein * ersetze dann wird das Produkt der zwei Zahlen
korrekt angezeigt und es gibt keine Fehlermeldung mehr.

Reiner

von Joerg W. (joergwolfram)


Lesenswert?

Hallo Reiner,

Die Beispiele funktionieren bei mir, wenn ich sie vom EEPROM lade. Das 
mit dem EXPR Error habe ich auch teilweise nachvollziehen können. 
Probier bitte mal aus, vor Eingeben der Programme die Zeilen mit ALT+DEL 
zu löschen und dann mit F4 zu starten. Dann sollte "END in 21:1" 
angezeigt werden. Wenn man jetzt das Progtramm eingibt, sollte es gehen. 
Woran es nun genau liegt, muß ich nochmal nachsehen.

Gruß Jörg

von Reiner Z. (rzett)


Lesenswert?

Hallo Jörg,

erst einmal vielen Dank Für Deine Mühe.
Ich bin sehr gespannt ob Dein Tipp funktionieren wird.
Leider kann ich es erst morgen Abend ausprobieren.

Also, bis dann

Grüße Reiner

von Reiner Z. (rzett)


Lesenswert?

Hallo Jörg,

juhu, es funktioniert.
Aber erst nachdem ich zwei andere ATMega8 programmiert habe.
Der erste hat das beschriebene Problem, der zweite startet mit nicht
lesbaren Zeichenwirrwar auf dem Bildschirm und stürzt nach 3-4
Tastendrücken total ab. Der dritte ATMega8 hat dann funktioniert.
Seltsamerweise ergibt ein Vergleich zwischen den drei Controllern, dass
sowohl die Fuses als auch die geflashten Daten identisch sind.
Ich muss jetzt zugeben dass ich die beiden 2k2 Pullups für die Tastatur
weggelassen habe. Die Takt- und die Datenleitung sehen aber mit dem
Oszilloskop so aus, dass es eigentlich keine Probleme geben dürfte.
Auf jeden Fall, vielen Dank für Deine Hilfe, auch im Namen meines 
Sohnes,
der morgen (bzw. heute) Autorennen spielen darf.

Viele Grüße und mit Vorfreude auf Deine nächsten Projekte.

Reiner

von Joerg W. (joergwolfram)


Angehängte Dateien:

Lesenswert?

Heute gibt es hier mal ein Update, da ich das Projekt erstmal soweit 
abschließen will.

- Senden / Empfangen von Programmen ist jetzt auch mit einfachen 
terminalprogrammen möglich

- Zeilenenden sind konfigurierbar (Linux/Mac/Windows)

- Autorun-Jumper entfällt, Aufruf des Editors bei Tastendruck im 
Intro-Screen

- Editor kann mit leerem Programm gestartet werden

- Wahlweise US keyboard Layout (nicht zur Laufzeit wählbar)

- überarbeitete DOKU

Viel Spaß damit,

Jörg

von Joerg W. (joergwolfram)


Angehängte Dateien:

Lesenswert?

Dieses Update braucht man nicht unbedingt, die Änderungen betreffen 
hauptsächlich die Dokumentation:

1. Nach mehreren Hinweisen habe ich endlich mal den Stromlaufplan 
korrigiert (PS2-Beschaltung, Autostart)

2. Anpassung der Beispielprogramme an die neuen Übertragungsroutinen 
(nur in der Doku, die Programme selbst sollten OK sein)

3. Die LaTex Sourcen der Dokumentation sind jetzt mit dabei

Beitrag #2519496 wurde von einem Moderator gelöscht.
von damir (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Jörg,
bitte entschuldigen Sie mich für meine gebrochene Deutsche Sprache, ich 
benutze Google übersetzer. Sagen Sie mir bitte, welche Fuses bei der 
Programmierung von Atmega8 oder Sie müssen nicht installiert werden und 
Sie stehen bereits standardmäßig? Viele Grüße Damir.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

In der "liesmich"-Datei steht

> Die Fuses müssen für externen Quarz eingestellt sein.

von Joerg W. (joergwolfram)


Lesenswert?

Im Liesmich der Version 035 stand es noch etwas ausführlicher drin:
1
Fuse-Einstellungen 
2
3
                Mega16  Mega88  Mega8
4
--------------------------------------
5
FUSE LOW        0xef    0xe6    0xef
6
FUSE HIGH       0xc1    0xd4    0xc1
7
FUSE EXT        0xff    0xff

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.