Translate

31 Januar 2013

Franzbox meets Arduino !!!!!!!

Heute hab ich mal erste Gehversuche mit Arduino unternommen!
Zunächst mal das "Blink"-Programm zum Test ob überhaupt was läuft.....
Das "hello world-Programm" , aber mit angepasster Display-Belegung sollte zeigen, ob ich
da irgendwas mit der Display-beschaltung der Franzbox zum Laufen bekomme,
und weil ich schon mal dabei war einiges einzufügen um auch die Initialisierung des doch
als ein bisschen zickig bekannten EA DIP204 Displays korrekt ablaufen zu lassen habe ich
da auch noch eine Zeile Text hizugefügt. Die Zeilenzuordnung passt noch nicht.
Das altbekannte Problem bei diesen LCDs 
Bei echten Standarddisplays lauten die Startadressen 0x00, 0x40, 0x14, 0x54
Beim EA DIP204 jedoch: 0x00, 0x20, 0x40, 0x60
(Das erklärt schon mal, warum der Text in der dritten anstatt in der zweiten Zeile auftaucht)

Mal sehen was da noch auftaucht.......
Dieses Display hat mich schon so oft genervt, weil der KS0072 Chipsatz nicht wirklich
Standard ist, sondern leider ein paar gemeine Unterschiede in der Adressierung hat.
Kein Problem, wenn man den Treiber selber programmiert, aber in Bascom und Arduino
ist genau das nicht wirklich vorgesehen.......
In Bascom reicht es, das Display als 20 x 4a zu definieren und den Chipsatz als KS072 zu
definieren. (ich habe da keine 0 vergessen!!!!) wie es bei Arduino läuft weiss ich noch nicht.
Da gibt es sicher irgend eine Lösung, die EA DIP204-Displays sind einfach so weit verbreitet
(und auch  preiswert, hochwertig und zuverlässig  wenn sie denn erst mal korrekt laufen)

Vor allem gings mir dabei um die Frage ob die Franzbox denn nun tatsächlich Arduino-Kompatibel
ist, wie geplant und ob ich da auch die Display-Ports so frei wählen kann wie in Bascom.
Ich habe meine Display-Pins allesamt auf den PortB gelegt, damit ich das LCD am STK500
mit einem einzigen 10pol Kabel betreiben kann und weil ich bisher noch fast alles mit den übrigen
Pins des Atmega erledigen konnte. Allerdings ist dadurch der SPI-Anschluss belegt.
also entweder Software-SPI verwenden oder das Display anders anschliessen.

Eine weitere Frage war, ob ich auf vorprogrammierte Bausteine angewiesen bin und dieses
ganze Bootloader- und USB-Adapter-Zeug etc.wirklich unbedingt brauche.......
Die Franzbox wurde eigentlich für ISP-Programmierung ausgelegt.
(zwar mit nicht normgerechter Pin-Belegung, aber das hat schon seinen Grund!)

Ergebnis: Volltreffer! Wenngleich ich das Arduino Hauptprogramm nicht dazu überreden konnte
mit irgend einem der mir zur Verfügung stehenden Programmer zusammenzuarbeiten, und auch die
anderen Programme welche ich so durchprobierte nicht gerade intuitiv zu bedienen waren..........
(AVRdude, als Kommandozeilen-Tool, das ist was für hartgesottene Freaks
und Ponyprog, das sollte eigentlich auch funktionieren, aber da ist so viel zum Einstellen,
das ist schwer überschaubar!
MyAvr Progtool gefällt mir sehr gut. Da versteht man sogar die Bedeutung der einzelnen Fuses.

So ist es mir dann doch noch gelungen die Dateien mit dem MyAvr Progtool und dem guten alten STK500 über eine serielle Leitung auf einen fabrikneuen Atmega168 zu brennen!!!
.....und das ohne den Bootloader und ohne irgend ein "original Arduino" Teil

Nachtrag 1.Feb2013: jetzt hat das Brennen auch mit meinem Eigenbau-Parallel-Port-Programmer
und dem Atmega168 auf einer Franzbox-V1-Platine geklappt mit MyAvr Progtool und der Einstellung
STK200 an LPT1. Warum Brennen aus Arduino IDE heraus nicht klappt habe ich aber
noch nicht herausgefunden.

Nachtrag 8.März 2013:
Mittlerweile habe ich mir natürlich auch einen echten Arduino UNO besorgt und ein bisschen damit
herumgespielt.Auch hier klappte der Upload zunächst nicht, obwohl ich mir sicher war,
alles richtig gemacht zu haben, bis ich dann irgendwo den Hinweis fand, dass Arduino IDE
mit Win2000 einige Probleme hat....... (Der USB-Treiber von WIN 2000 ist nicht kompatibel )
Also den Rechner mit XP und später auch noch Vista neu gestartet,
Multi-Boot-Umgebung machts möglich, aber 2000 ist halt am schnellsten.....
und siehe da, hier klappt alles problemlos! 

Ich hab den Atmega168 übrigens zum Arduino Mini mit Atmega168 erklärt, der ist ja so ziemlich 
ähnlich in der Grundschaltung und hat kein USB drauf 
Die seriellen Leitungen sind bei der Franzbox  auf dem kleinen 
roten Micro-Match-stecker rausgeführt. (ganz links unten im Bild)
Einer Programmierung seriell per Bootloader steht also nicht viel im Weg, fehlt nur ein passender USB 
auf Seriell-Adapter, aber darum kümmere ich mich ein andermal.
Da muss ich noch so einiges an Infos zusammentragen, z.B wie mn den Bootloader ggfs auf
einen neuen Chip gebrannt bekommt und welche Fuses warum wie gesetzt sein sollten.
Mit den Fuses ist noch so manches unklar, Bootloader flashen klappte auch nicht wie vorgesehen
weil weder das STK500 (warum nicht?) noch mein selbstgebauter STK200/300 Parallel ISP-Adapter
korrekt erkannt wurden. Da muss man offenbar noch was an den Konfigurationsdateien ändern.

Nachtrag:
Eine höchst interessante Seite hierzu:  http://avrprogrammers.com/bld-arduino-max232.php
Den seriellen Adapter werde ich demnächst mal nachbauen, vielleicht klappt dann der
serielle Upload per Bootloader auch noch irgendwann

Für heute reicht das aber und jetzt muss ich erst mal einen Überblick über all die Eigenheiten 
von Arduino bekommen. Aber für die allerersten vier Stunden mit Arduino als völliger Neueinsteiger
in dieser Programmiersprache kann ich sowieso erst mal mit dem Erreichten mehr als zufrieden sein.
Ich brauche in naher Zukunft eine CAN-Schnittstelle, und da ist Bascom derzeit noch ein bisschen
schlecht dafür gerüstet, und das ganze Steuerprogramm für den CAN-Controller selber zu schreiben
ist mir momentan doch noch eine Nummer zu groß! 
deshalb der Ausflug in Richtung Arduino, da gibt es schon eine funktionierende 
LIB für die SPI-CAN-Controller von Microchip......Und interessiert hat mich das schon sehr lange!
Eigentlich bin ich ja ein großer BASCOM-Fan, aber Arduino hat halt auch seine Stärken (und Schwächen)
Ich verspreche mir halt Vorteile im Bereich CAN, bei grafischen Displays mit Touchscreen,
beim Einbinden von Speichermedien (SD) und eventuell auch in Sachen Bluetooth, weil da ganz einfach
einiges an fertiger preiswerter Hardware und passenden Libraries zur Verfügung steht.
Ich werde aber wohl jetzt nicht alles auf Arduino umstellen!Es gibt einige Dinge, die sind offenbar
mit Bascom um vieles einfacher bzw besser zu lösen! Z.B. das Einstellen der Prescaler bei den Timern.
Diese gerade für PWM-Geschichten äusserst wichtige Einstellung ist beim Arduino nicht vorgesehen.
Zumindest nicht mit den ganz "normalen" Einstellmöglichkeiten. Da muss man so richtig in die 
Register reinschreiben, und dann ist es immer noch nicht ganz gewiss, ob das Programm damit
zurechtkommt, weil es einfach nicht vorgesehen ist, dass irgend ein Timer plötzlich anders läuft.
Schon das Ändern der Quarzfrequenz ist eigentlich auch nicht vorgesehen! Ein Arduino taktet mit
16MHz und damit Basta! Sicher ist alles irgendwo einstellbar, aber eben nur durch die Hintertür.
Eigentlich sehr schade, es ist ja die selbe Hardware, also sollte man da auch die selben Möglichkeiten
haben möchte man meinen. Bascom entspricht einfach viel besser meiner Denkweise, drum werde ich
auch dabei bleiben so lange es irgendwie geht.


Nachtrag 1.Feb.2013:


Falls es jemanden interessiert, ich habe eine Anleitung gefunden, wie man das EA DIP204
in Arduino korrekt initialisiert bekommt und vor allem auch die Zeilenanordnung anpassen kann.
ich hab das noch nicht in der Library geändert, drum waren bei mir die Zeilen verrutscht.
Es widerstrebt mir aber jetzt, die originale LiquidCrystal.cpp zu modifizieren.
Die müsste man doch auch unter anderem Namen speichern können??????
EADIP204.ccp wäre gut
Aber so eine Library besteht aus mehreren Dateien..........
.ccp und .h die irgendwie zusammengehören da muss ich auch noch ein bisschen forschen!


// Franzbox Belegung:
LiquidCrystal lcd(12, 13, 8, 9, 10, 11);

void setup()
{
lcd.begin(20, 4);

{
lcd.command(0x01);//clear display
delay(02);
lcd.command(0x24);//function set RE=1
delay(50);
lcd.command(0x0C);//control, display on, cursor off, blinken off
delay(50);
lcd.command(0x20);//function set RE=0
delay(50);
lcd.command(0x06);//entry mode segment bidirectional
delay(50);
lcd.command(0x24);//function set RE=1
delay(50);
lcd.command(0x09);//extended function set, 4 lines, 5-dot fontwith
delay(50);
lcd.command(0x20);//function set RE=0
delay(20);
lcd.command(0x01);//clear display

}
}


Dann in der liquidCrystal.cpp-Datei folgendes ändern:
( Arduino-1.0.3\libraries\LiquidCrystal.cpp )

int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
in int row_offsets[] = { 0x00, 0x20, 0x40, 0x60 };

Keine Kommentare:

Kommentar veröffentlichen