hi,
heute war ein guter Tag \/
12 Stunden Tagdienst ohne Schwerkranke; mit wenig Einsätzen, schönem Wetter und heute Abend dann das LCD-Display an´s laufen gebracht
Seltsam, daß derartige "Kleinigkeiten" eine scheinbar tiefe Befriedigung vermitteln können...
Von Anfang an:
Gestern Abend/Nacht habe ich nochmal hier und in den "Weiten des Netzes" nach Lösungsansätzen gesucht und bin vermeindlich fündig geworden:
Bild hier
Code:
'LCD konfigurieren
Config Lcd = 20 * 4 '4 x 20 Zeichen Display
' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
'LCD Ausgabe
Cls 'loesche das LCD Display
Wait 1
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "Hallo Roboter-Netz" 'String auf Display anzeigen
Locate 2 , 1 'Cursor auf 2 Zeile, 1 Spalte
Lcd "Loesung gefunden :-)" 'String auf Display anzeigen
Locate 3 , 1 'Cursor auf 3 Zeile, 1 Spalte
Lcd "Blicke aber noch" 'String auf Display anzeigen
Locate 4 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "nicht richtig durch" 'String auf Display anzeigen
Als ich über diese Initialisierung stolperte dachte ich bei mir:
"Kann es denn so einfach sein?"
Zu Zeiten meiner CC-Basic mußte ich alles noch "von Hand zu Fuß" schreiben...
Zusätzlich habe ich nocht im Bascom folgendes geändert/angepasst:
Bild hier
In Kombination mit einer neuen gefrästen "Muster-Plexi-Platte mit Baummotiv" kam dann folgendes heraus:
Bild hier
Der Baum wird nur von einer einzelen RGB-LED von unten angestrahlt.
Die umlaufenden Kanten sind noch nicht verspiegelt.
Für interessierte; gefräst habe ich mit:
* Vorschub 100mm/min
* Drehzahl ca. 8.000 1/min (mehr ist nicht notwendig bei dem kleinen Vorschub)
* Zustellung: 0,25mm (zwei Durchgänge a´ 0,23mm und 0,02mm um die Nut schön sauber zu bekommen)
* 45 Grad spiralverzahnter Stichel (CNC-Eltner)
* Trocken gefräst (naß ist bei Plexi besser!)
* Die Scheibe ist 5mm dick.
Ein kurzes Video habe ich auch für euch hochgeladen.
Wie versprochen / angedroht mit Bach: "Tokata und Fuge"
http://www.youtube.com/watch?v=SC4ouaQBkrs
Code:
'Hardware PWM Lauflicht und LCD-Display 4x20 by Klingon77 & Roboter NETZ (WIKI)
'01 Apr 2009
$regfile = "m168def.dat" 'Compilerdefinition
$crystal = 16000000 'Quarzfrequenz
'----------------------------------------------------------------------------------------------------
'
'Ports initialisieren:
Ddrb = &B00000000 'PB alle Eingang
Ddrc = &B00111111 'PC 7 & 6 Eingang; 5-0 Ausgang
'C0=DB4; C1=DB5; C2=DB6; C3=DB7; C4=RS; C5=E (RS: 0=Initialisieren; 1=Daten)
Ddrd = &B01101000 'PD3, PD5 & PD 6 Ausgang; Rest Eingang
Portd.2 = 1
Portd.4 = 1
'Timer einstellen(Timer 0 & 2 sind 8-Bit Timer):
'
'Timer0 auf PWM stellen
'Timer0 PWM Ausgabe A(PD 6) & B (PD 5) einstellen
'Clear Down; LED wird mit höherem Variablenwert heller
'Vorteiler = 8
Config Timer0 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
'Timer2 auf PWM stellen
'Timer2 PWM Ausgabe A(PD 3) einstellen
'Clear Down; LED wird mit höherem Variablenwert heller
'Vorteiler = 8
Config Timer2 = Pwm , Compare B Pwm = Clear Up , Prescale = 8
Enable Timer0 'Timer0 starten
Enable Timer2 'Timer2 starten
'PWM Ausgabepins
Rot Alias Ocr0a 'PD 6
Gruen Alias Ocr0b 'PD 5
Blau Alias Ocr2b 'PD 3
Rot = 0
Gruen = 0
Blau = 0
'----------------------------------------------------------------------------------------------------
'Dimensionierung von Variablen
'allgemeine Schleifenlaufvariable
Dim Lauf As Byte
'Pausenwert in "mS" während der Farbwechselschleifen (max: 65535 mS)
Dim Pause As Word
Dim Disp As Byte 'Variable welche an das LCD übergeben wird
Declare Sub Farbwechsel01
Declare Sub Farbwechsel02
'----------------------------------------------------------------------------------------------------
'Programmvorbereitungen
Pause = 10 'Pausenzeit (mS) im Farbwechsel
'----------------------------------------------------------------------------------------------------
'Hauptprogramm
Wait 2
'LCD konfigurieren
Config Lcd = 20 * 4 '4 x 20 Zeichen Display
' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
'LCD Ausgabe
Cls 'loesche das LCD Display
Wait 1
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "Hallo Roboter-Netz" 'String auf Display anzeigen
Locate 2 , 1 'Cursor auf 2 Zeile, 1 Spalte
Lcd "Loesung gefunden :-)" 'String auf Display anzeigen
Locate 3 , 1 'Cursor auf 3 Zeile, 1 Spalte
Lcd "Blicke aber noch" 'String auf Display anzeigen
Locate 4 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "nicht richtig durch" 'String auf Display anzeigen
'RBG-LED Baum in Plexi
Wait 1
Rot = 255
Waitms 500
Rot = 0
Gruen = 255
Waitms 500
Gruen = 0
Blau = 255
Waitms 500
Blau = 0
Wait 1
Do 'Endlosschleife: Beginn
Farbwechsel01
'Debounce Pind.2 , 0 , Farbwechsel01 , Sub
Debounce Pind.4 , 0 , Farbwechsel02 , Sub
Loop
'----------------------------------------------------------------------------------------------------
'Unterprogramme
Sub Farbwechsel01
Rot = 255
Blau = 0
Gruen = 0
Wait 2
For Lauf = 1 To 255
Rot = 255 - Lauf
Blau = Lauf
Waitms Pause
Next Lauf
Rot = 0
For Lauf = 1 To 255
Blau = 255 - Lauf
Gruen = Lauf
Waitms Pause
Next Lauf
Blau = 0
For Lauf = 1 To 255
Gruen = 255 - Lauf
Rot = Lauf
Waitms Pause
Next Lauf
Gruen = 0
Wait 2
Rot = 0
End Sub
Sub Farbwechsel02
Rot = 255
Wait 2
Rot = 0
End Sub
End 'end program
Nun habe ich noch ein paar Fragen an euch:
(erklärende Link´s reichen; dann müßt Ihr die "Basics" nicht zum 1000 ten Mal erklären)
* wie steuert der ATmega168 nun das LCD-Display an?
Da gehört doch mehr dazu als das was in dem Programmbeispiel zu sehen ist (Initialisierung; Speicheradressen, Zeilenverwaltung usw.)
Hat der 168er da was im ROM?
Ging das von Bascom aus? Ich habe ja keine ".LIB" aufgerufen.
* Wie bekomme ich den Cursor ausgeschaltet?
Gibt es da auch einen einfachen Befehl, welchen ich nun übergeben kann?
Ähnlich wie "LOCATE X,Y"
Ich möchte gerne Texte darstellen ohne daß der Cursor sichtbar ist.
Das mein kleines Programm so "unaufgeräumt" und nicht richtig dokumentiert ist bitte ich zu entschuldigen
Ist halt eine Testphase in der ich lediglich Funktionen erlernen und testen möchte.
Über die Ergonomie mache ich mir später Gedanken, wenn ich gelernt habe mit den Grundlagen umzugehen.
liebe Grüße und Dank für eure Hilfe,
Klingon77
Nachtrag:
Ganz vergessen zu fragen...
Die freien PIN´s am LCD (4 Bit Modus) liegen auf Masse.
Nun habe ich gelesen sie sollen über einen 10KOhm Widerstand gegen Masse geführt werden um vor dem Initialisieren einen "internen" Kurzschluß zu vermeiden?
Ist da was dran? Im Wiki steht nur "gegen Masse legen" um ein eindeutigen Signalpegel (kein TrisState) zu haben.
Von PullDown Widerstand steht da nichts...
Lesezeichen