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:
Externes Bild anzeigen
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:
Externes Bild anzeigen
In Kombination mit einer neuen gefrästen "Muster-Plexi-Platte mit Baummotiv" kam dann folgendes heraus:
Externes Bild anzeigen
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...







Zitieren

Lesezeichen