hallo allerseits! habe die datei lcd routines (tutorial) für mich umgeschrieben da ich andere pins verwenden will statt pin db4 pd5 usw. ;DB4 pd5 ;db5 pd6 ;db6 pd7 ;db7 pb0 ;rs pb6 ;e pb7 ;-- = alter original code ausgeklammert funktioniert nur leider nicht und finde einfach keinen fehler! kann mir jemand weiterhelfen vielen dank im vorhinein thomas
Habe mir deinen Code nicht wirklich genau durchgesehen, da Du leider deine Änderungen nicht Dokumentiert hast. Als erstes würde ich die Port´s in deiner Routine nicht direkt "beziffer" (sbi portd, 5) sondern würde name per .EQU dafür definieren, da du sonst jedesmal alles umschreiben musst wenn du mal nur eine Leitung an einen anderen Pin haust... Ich hab mal meine Routine mit in den Anhang gepackt, vieleicht kannst Du damit was anfangen. Gruß Dennis
musst grad festellen das es meine alte routine ist, sie funktioniert zwar ist aber kaum dokumentiert. gruß dennis p.s. die neuere hab ich leider nicht hier.
vielen dank erstmals mein problem ist daß sich meine datenpins auf verschiedenen ports befinden daher mein etwas komlpizierteres asm file lg thomas
Ist doch kein Problem ;) am anfang der File "Definierst du doch die Pins" um es Dir aber nicht allzu "schwer" zu machen leg die DB4-DB7 auf irgendein Port 0-3 das solltest auf jedenfall machen um dein register, welches deine Daten beinhaltet nicht noch in einzelne Bits zu zerlegen und auf deine einzelnen DB4-DB7 zu legen. Das macht kein Sinn, da du dafür zeit "verschwendest" welche du so sinnvoll verteilst. brauchst also nichts komplexes zu machen als dein Datenbyte (bei 8 bit LCD Ansteuerung) direkt auf den Port zu legen. Bei 4bit Ansteuerung erst die eine hälft dann die andere. ich habe dafür auf einen ATmega8 die DB4-7 den PortC genommen, für die Restlichen Leitungen PortD ---- Habe auch mal den Fehler gemacht ein Display (KS0107/8) "wirr" an die Ports angeschlossen, um mich dann hinterher rumzuärgern, das ich jetzt jedes einzelne bit auswerten muss und auf den Port zu legen... kurz gesagt "nie wieder" ;) --- Andere Methode wenn Du wirklich keine andere Möglichkeit hast benutz doch einfach nen Portexpander welchen du mit 3 Leitungen ansteuerst. Bit reinschieben, Clocken, reinschieben, clocken etc... dann Latch und fertig is... kannst dann wieder 8bit Modus machen. Gruß Dennis
muß leider die bits einzeln abfragen bzw. zerlegen dazugehörige platine ist leider schon fertig bestückt (viel bauteile) (einen platinenfehler kann ich mit ziemlicher sicherheit ausschließen) alles ausgemessen display hatte mit originaler lcd routines im versuchsaufbau schon funktioniert ich dachte mir ich mache diese bitweise abfrage einfach so: sbrc temp1, 3 sbi portd, 0 sbrc temp1, 2 sbi portd, 7 sbrc temp1, 1 sbi portd, 6 sbrc temp1, 0 sbi portd, 5 statt das byte via out auszugeben (alle änderungenen sind weiter eingerückt und der originalcode übersichtshalber mit ;-- ausgeklammert habe schon recht viel zeit mit diesem problem verbracht vielen dank im vorhinein thomas
Mooment. Wenn ich das richtig sehe, hast du doch nur statt Pin0-3 die Pinne 4-7 benutzt oder? ist doch ganz easy: Tutorial Routine: lcd_data: mov temp2, temp1 ;"Sicherungskopie" für ;die Übertragung des 2.Nibbles swap temp1 ;Vertauschen andi temp1, 0b00001111 ;oberes Nibble auf Null setzen sbr temp1, 1<<4 ;entspricht 0b00010000 out PORTD, temp1 ;ausgeben rcall lcd_enable ;Enable-Routine aufrufen ;2. Nibble, kein swap da es schon ;an der richtigen stelle ist andi temp2, 0b00001111 ;obere Hälfte auf Null setzen sbr temp2, 1<<4 ;entspricht 0b00010000 out PORTD, temp2 ;ausgeben rcall lcd_enable ;Enable-Routine aufrufen rcall delay50us ;Delay-Routine aufrufen ret ;zurück zum Hauptprogramm Es wird das untere Nibble auf 0 gesetzt (Pin0-3) und die oberen werden übernommen. du machsts wie folgt: lcd_data: mov temp2, temp1 ;"Sicherungskopie" für ;die Übertragung des 2.Nibbles andi temp1, 0b11110000 ;oberes Nibble auf Null setzen sbr temp1, 1<<4 ;entspricht 0b00010000 out PORTD, temp1 ;ausgeben rcall lcd_enable ;Enable-Routine aufrufen ;2. Nibble, kein swap da es schon ;an der richtigen stelle ist swap temp1 ;Vertauschen andi temp2, 0b11110000 ;obere Hälfte auf Null setzen sbr temp2, 1<<4 ;entspricht 0b00010000 out PORTD, temp2 ;ausgeben rcall lcd_enable ;Enable-Routine aufrufen rcall delay50us ;Delay-Routine aufrufen ret Oder lieg ich falsch? Nun wird nämlich alles auf die oberen Pins umgebastelt. Hab lediglich das Swap verschoben und die ANDI bitmaske geändert, damit auch die richtigen Ports angesprochen werden.
nein nein! wie geschrieben: ;DB4 pd5 db1 ;db5 pd6 db2 ;db6 pd7 db3 ;db7 pb0 db4 ;pins original - meine pins - bezeichnung ich hab die bits ja auch schon einzeln rausgefischt (siehe code) und pins dann einzeln damit angesteuert ich finde beim debuggen auch keinen fehler aber mit lcd fuktioniert es einfach nicht! ist sicher nur eine kleinigkeit - aber finde sie leider nicht! vielen dank erstmal lg thomas
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.