hoi zäme ich habe das avr-tutorial von mikrocontroller gelesen und möchte mal selbst versuchen, ein lcd anzusteuern. mir ist aber nicht klar, wie ich das busy-flag des lcd's auslesen kann. wenn ich RW auf 1 setzte - an welchem pin des displays kann ich dann das busy-flag lesen und - wie kann ich das busy-flag lesen, wenn ich zuvor bei meinem atmel die pins als ausgänge festgelegt habe, welche die pins RW, RS, E und DB0 bis DB7 des displays ansteuern? auf denen kann ich dann doch nicht lesen, sonst wäre die definition im datenrichtungsfeld doch überflüssig!!! markus
hoi 1)Wenn ich RW auf 1 setzte - an welchem pin des displays kann ich dann das busy-flag lesen und http://www.geocities.com/dinceraydin/lcd/commands.htm DB7 = busyflag 2)wie kann ich das busy-flag lesen, wenn ich zuvor bei meinem atmel die pins als ausgänge festgelegt habe, welche die pins RW, RS, E und DB0 bis DB7 des displays ansteuern? auf denen kann ich dann doch nicht lesen, sonst wäre die definition im datenrichtungsfeld doch überflüssig!!! Die Definition ist nicht überflüssig, du musst bloss die pins auf eingang schalten, wenn du das busyflag lesen möchtest. fröhlichi feschtteg(bin au schwiizer:P) nik tschuldigung wegen meiner Rechtschreibung, ist schon spät;-)
ah ja ich hab einfach mal angenommen, du sprichst von einem lcd mit einem hd44780 oder kompatiblen controller...
Der Anschluss vom Busy-Flag-Pin wird im DB genannt, meist Pin6 oder Pin7. Um das Lesen zu können musste den Ausgang des Ports natürlich auf Eingang schalten und danach (wenn gelesen) wieder zurück auf Ausgang. Die paar Befehle sollten doch noch ins Proggi reinpassen.
es kann aber sein, dass das busy-flag bei nach einigen Kommandos nicht zur verfügung steht (init z.B.)
beim 'init' wirds noch nicht gebraucht, aber anschliessend solltest du es immer abfragen, bevor du die nächsten daten schickst. habe auch schon so'n display gehabt, welches beim timing langsamer war als andere versuchskaninchen - damals 'nen wolf gesucht, mit busy-flag wars dann aber erledigt. ... und gleichfalls schöne weihnachtsgrüsse, an alle hier
hab nun doch noch eine frage dazu. auf der oben verlinkten seite steht: > 1. Set R/W Pin of the LCD HIGH(read from the LCD) > 2. Select the instruction register by setting RS pin LOW > 3. Enable the LCD by Setting the enable pin HIGH > 4. The most significant bit of the LCD data bus is the state of the busy flag(1=Busy,0=ready to accept instructions/data).The other bits hold the current value of the address counter. > >*This is a 1-micro-second instruction. muss ich nun 1 us warten, bis das busyflag anliegt? hab nämlich im datenblatt von "LCD 162C" gelesen, dass die "Execution Time" bei diesem display bei 0 mikrosek. liegt um das busy-flag zu lesen. ich stelle mir vor, um trotzdem auf der sicheren seite zu stehen in folgender art zu programmieren. ich nehme an, dass ich punkt 1, 2 und 3 alle gleichzeitig ausführen kann, oder? ldi tmp, 0b110xxxxx ; es gilt: RS (PB5)=0; RW (PB6)=1; E (PB7)=1 out DDRB, tmp ; muss ich nun hier 1 mikrosekunde warten, (und bei gewissen displays, z.B beim "LCD 162C" gar nicht) bis das busyflag am display anliegt? wie mach ich das bei einem uC mit 1 MHz, einfach mit einer "nop" anweisung? (und wenn das programm auf einen schnelleren nC übertragen wird, könnte hier ein fehler entstehen, weil das busyflag noch gar nicht anlag???)
... nicht gleichzeitig rs, r/w und enable mit 'out ddrx, register' ausgeben - funktioniert bei den meisten lcds nicht. beim hd44780 werden die anliegenden daten mit fallender flanke von enable übernommen, so wie beim folgendem codeschnipsel:
1 | busy_flag: |
2 | ldi temp,0b00000000 ;port a ist eingang |
3 | out ddra,temp |
4 | |
5 | cbi portd,rs ;befehl wird gesendet |
6 | sbi portd,rw ;setze lcd in lesemodus |
7 | sbi portd,e ;spreche lcd an |
8 | |
9 | nop |
10 | nop |
11 | nop |
12 | |
13 | sbic pina,bf ;lcd bereit? |
14 | rjmp busy_flag ;nein, wiederhole |
15 | |
16 | cbi portd,e ;disable lcd |
17 | |
18 | ret ;lcd bereit |
halte dich da auch mit an das datenblatt des lcd-controllers, hilft dir da bestimmt auch weiter (der vom lcd ist eventuell etwas spärlich ausgefallen). ... und frage das busy-flag trotzdem ab, denn wenn du mal das display wechselst hast du vielleicht probleme
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.