Neueste Beiträge

#1
P
Compiler Software / Aw: printf() in C
Letzter Beitrag von pic18 - Gestern um 15:40:07 CEST
So wie beschrieben funktioniert die Umleitung von printf zur Anzeige. Aber leider kennt der alten C18 Compiler keine Float-Ausgabe ("%f..") in printf. Da ich schon alle anderen Ausgabefunktionen selbst erstellt habe, und ich keine Lust habe, aus einer Fließkommazahl die Integerzahl herauszufiltern und aus den Nachkommastellen auch eine Integerzahl zu generieren, werde ich die printf -Funktion aus meinen Projekt verbannen und bei dringenden Bedarf meine bestehende Output - Routine erweitern. 
#2
P
Mikrocontroller / Aw: LCD-Ansteuerung
Letzter Beitrag von pic18 - Gestern um 14:07:02 CEST
So wie ich das in Erinnerung habe, hatten die alten 16er kein LAT- Register


#3
O
Mikrocontroller / Aw: LCD-Ansteuerung
Letzter Beitrag von Ottmar - Gestern um 13:25:34 CEST
..man kann nicht oft genug gegenlesen!
..die Ausgabe beginnt in digit 13!
Falsch: movlw LINE1+d'11'
Richtig: movlw LINE1+d'13' ;(Ausgabe "2")
..
grummel... >:( Ottmar
#4
O
Mikrocontroller / Aw: LCD-Ansteuerung
Letzter Beitrag von Ottmar - Gestern um 13:09:26 CEST
Tippfehlerberichtigung im vorgenannten File:
Falsch: xorlw SET_DDRAM_ADDR
Richtig: IORLW SET_DDRA_ADDR
Ottmar
#5
P
Mikrocontroller / Aw: LCD-Ansteuerung
Letzter Beitrag von picass - Gestern um 11:41:00 CEST
Habe es geschafft..... nunmehr wird auch in die zweite Zeile geschrieben! Bin ja so stolz auf mich! Räusper......., ähm......., allerdings geht der Lorbeerkranz selbstredend an pic18, dessen Prog-Schnipsel:
movlw adresse; (0x40)
movwf LcdDaten
bsf LCDDaten,7; (0xc0) bit 7 setzen, kann auch mit oder 0x80 gesetzt werden
call OutLcdControl

den Durchbruch brachte. Danke pic18. Der Grund, warum das im ersten Anlauf nicht funktionierte und zu der unvollkomenen Anzeige "lcd1" führte, war ein trivialer: nach Abarbeitung der ersten drei Zeilen sollte ja in die Zwischenroutine "OutLcdControl" gecallt werden. Und diese erwartete die LCDDaten nicht im Register "LcdDaten", sondern schlicht im W-Reg. Das hätte ja auch fast hin gehauen, aber so wurde die dritte Zeile mit dem Setzen des Bits 7 unterschlagen. Nachdem nun diese Unterschlagung beseitigt ist, kommt es zur passenden Anzeige im Bild "lcd3".
Super....., diese jahrzehnte-lang klaffende Lücke ist nun gefüllt. Also fast. Da ist sicher noch Weiteres nötig. Aber: Jubel, es ist geschafft und ich bin ja so stolz auf ...... ähm....!

@Ottmar : deinen obigen Beitrag entdeckte ich gerade eben, als ich den vorbereiteten Text schon verfasst hatte. Dein Prog-Beispiel werde ich gleich runter laden und mir heute Nachmittag anschauen. Schon mal vorausschauend: danke für dein Hilfe-Angebot.
Nein, der Sprut ist kein Heiliger. Hatte gestern nochmal in seinen anderen Beispielen gesucht und nichts Zweizeiliges gefunden. Und seine Darstellung der Einzeiligkeit krankt - wie dargestellt daran - , dass keine echte Darstellung der Zeilenauswahl beschrieben ist. Reset und das wars, daraus kann man mitnichten auf Positionierung für Zweizeiler schließen. Zudem hatte der alte Knabe einen schlimmen Fehler in seinem Prog. Er hat gegen die u.a. Microsoft-Regel verstoßen:" read from the port and write to the latch". Die galt damals auch schon und mithin war Schreiben auf den Port möglicherweise erfolgreich, aber eben ein Prinzipenverstoß.
Grüße, picass
lcd1.jpglcd2.jpglcd3.jpg

#6
O
Mikrocontroller / Aw: LCD-Ansteuerung
Letzter Beitrag von Ottmar - Gestern um 10:58:25 CEST
Hallo
beigefuegt ist meine Vorgehensweise zum Schreiben in ein HD44780-LCD per ASM. Ich hoffe das einigermassen verstaendlich und möglichst fehlerfrei dargestellt zu haben. Der Text kann mit korrekter Formatierung in den MPLAB-Editor geladen werden.
Fuer picass:
wichtig bei Dir erscheint mir das Verstaendnis fuer die Adressierung.
Zur Ehrenrettung von sprut: Aus meiner Sicht hat er das Thema "LCD" damals hervorragend, übersichtlich, leicht verständlich und sehr ausführlich dargestellt!

MfG Ottmar
#7
P
Mikrocontroller / Aw: LCD-Ansteuerung
Letzter Beitrag von pic18 - 23.04.2025, 19:43:52 CEST
der Code sollte eigentlich laufen, zeig mal den aktuellen kompletten Code. Welche Anzeige hast Du denn? Hat diese nur zwei Zeilen?
#8
P
Mikrocontroller / Aw: LCD-Ansteuerung
Letzter Beitrag von picass - 23.04.2025, 19:03:21 CEST
Hallo pic18 !
Das war eine Überraschung, dass du dich derart fix mit einem Prog-Vorschlag vermeldet hattest. Wau...., danke sehr.
Deinen Vorschlag konnte ich gerade eben zwischen dem täglichen Trouble ausprobieren. Hier war heute der Himmel los: ein während des Mittagessens vage geäußertes Stichwort - nämlich "Teneriffa" - führte in einem Blitzermarathon zur Buchung einer Reise. Plus Leihwagen, plus Platz im Parkhaus - obwohl dort alles dicht war....!
Also gettz dein Vorschlag. Er führte auch schon zu einem feinen Erfolg: der für die zweite Display-Zeile ausgedachte Text "zwei" erschien tatsächlich. Beim ersten Anlauf in der ersten Zeile, wobei Voriges gelöscht wurde, im zweiten Anlauf auch in der ersten Zeile, und der Rest vom Vorigen war noch vorhanden. Nach der Hochkonzentrations-Übung des Urlaubbuchens bin ich jetzt platt und sehne mich nach einem Schluck Rotwein und einem oder zwei Kürbiskernbrötchen, um das demnächstige Abdüsen zu feiern.

Das Prog vom "sprut" krankt u.a. daran, dass dort nicht wirklich eine Einsprungs-Prozedur mit ggf. variabler Adresse enthalten ist, sondern dass stattdessen in der Initialisierung ein "Gesamt-Reset" ausgelöst wird, was den Cursor natürlich auf die erste Stelle setzt. Also genau genommen erfolgt so keine (variable) Adress-Angabe/-Routine. Man müsste mal in einem anderen Programm schnüffeln, das zwei Zeilen bedient. Aber gettz bin ich platt......Nochmal danke für dein Hilfe. Ab zur Rotweinflasche....
Grüße, picass
#9
P
Mikrocontroller / Aw: LCD-Ansteuerung
Letzter Beitrag von pic18 - 22.04.2025, 20:07:05 CEST
meinst Du eine Anzeige 4x20 Zeichen?
zum Verständnis gebe ich hier mal den C Code
void LCD_gotoxy(uint8_t spalte, uint8_t zeile)
{
    uint8_t Adresse;

    akt_pos.spalte_nok = spalte;    //hier Spalte gleich merken, wird verändert
    akt_pos.zeile = zeile;
    letzte_pos.nok =1;    //letzte position nicht mehr gültig


    // 2: Zeile 0..3
    // 3: Spalte 0..39
    // Zeile 0: 0x00
    // Zeile 1: 0x40
    // Zeile 2: 0x00+Zeilenlänge
    // Zeile 3: 0x40+Zeilenlänge

    if (zeile>1) //Zeile2, 3
    {
        spalte += 20; //LCD_spalten;
    }
    Adresse = ((zeile & 0x01) * 0x40) + spalte;
    writeLCDCmd(Adresse | 0x80);

    wait_1us (25);//_ff testweise org. 25us

}
bei deinem Prog. müsstest Du folgendes schreiben um den Cursor zu setzen
bcf    PORTC, LcdRs; ist nicht unbedingt nötig da schon gelöscht.
movlw adresse; (0x40)
movwf LcdDaten
bsf LCDDaten,7; (0xc0) bit 7 setzen, kann auch mit oder 0x80 gesetzt werden
call OutLcdControl
Anschließend dein Zeichen laden und mit OutLcdDaten ausgeben.

ich würde nur ein Ausgabeunterprog. schreiben und bei Daten laden RS löschen bzw. setzen. Den Text würde ich in einer Schleife ausgeben.
#10
P
Mikrocontroller / Aw: LCD-Ansteuerung
Letzter Beitrag von picass - 22.04.2025, 18:24:27 CEST
Wärme erneut auf und gönne mir einen Rückfall ins Assemblieren. Das aber deswegen, weil es mir um die Verwendung von LCD-Displays geht und da wäre im Grundsatz ein Wiedereinstieg in Assembler eher leichter. Wo ist das Prob?
Das oben eingestellte Programm funktioniert immer noch, es gibt in einer Zeile die Worte "danke Piccer" aus. Nun würde ich gerne die zweite Zeile auch in Betrieb nehmen, finde aber weder im Sprut'schen orig Programm noch auf seiner Homepage mit Erklärungen zum LCD-Display einen Hinweis, wie dem Programm beizubringen ist, nicht auf den Anfang der ersten Zeile zu gehen (quasi Reset), sondern halt auf den Anfang der zweiten Zeile.
Die Adresse für Ersters ist schlicht "00", die Adresse für die zweite Zeile lautet "40", soweit klar. Aber wo findet sich das im Programm? Das orig Sprut-Prog ("Hello") ist unten im gezippten Anhang, das ist die alte Version von MPLAB. Mein Prog befindet sich oben und ist die mittlere MPLAB-Version. Der Link auf die Sprut-Beschreibung lautet:
https://sprut.de/electronic/lcd/index.htm
Kann mir da jemand beim Sprung in die zweite Zeile helfen?
Grüßen, picass
lcd.zip
🡱 🡳