Hallo, ich bin ratlos ich habe mir den Frequenzzähler von
http://www.sprut.de/electronic/pic/projekte/frequenz/freq_uni_628.htm
nachgebaut.
Leider bekomme ich den nicht zum laufen.
PIC 16F628A,
Quarz 10MHz,
LCD NDM162(HD44780 Controller)
Fehlerbeschreibung:
Display zeigt nur eine Leiste mit schwarzen Rechtecken.Deutet drauf,
dass es nicht Initalisiert wurde. Auch die LED für den ersten Eingang
der geschaltet wird leuchtet nicht.
Spannungen überprüft(mehrfach) --> OK
(Auffälligkeiten der R/W Pin am LCD ist high sollte aber low sein oder?
Pins am PIC die beim Start low sein sollten, sind es nicht. Er hängt
sich warscheinlich schon vorher auf!MCRL high so wie es sein sollte!)
Schaltung,Layout,Platine überprüft(mehrfach) --> OK
Display getauscht --> ohne Erfolg;
Controler getauscht --> ohne Erfolg;
Quarz getestet/getauscht (schwingt) --> ohne Erfolg
Display an ander Schaltung geht,
Display mit selben Controller und anderer Software geht auch,
Display und Controller Frequenzzählerplatine geht auch,
Ich vermute das beim Initalisieren was schief läuft, könnte jemand sich
mal den ASM Code anschauen damit kenn ich micht nicht aus. Der Fehler
muss ja dort zu finden sein. Ich habe auch schon die Unterschiede
zwischen dem 16F628A und dem eigentlich verwendetem 16F628 durchgelesen
konnte aber nichts relevantes finden.Habe schon ne Mail geschickt an
sprut, noch keine Antwort erhalten. Hat wohl viel zu tun!
MfG Dave
Hallo Dave,
Also, wenn Dein LCD eien schwarzen Balken zeigt, ist das schon mal ein
gutes Zeichen. Nimm doch mit der Kontrasteinstellung die "Schwärze" so
weit zurück dass diese gerade noch schwach erkennbar ist, damit die
Zeichen sich aus der dann helleren Umgebung abheben.
Möglicherweise stimmt lediglich Deine Initialisierung nicht. Bitte prüfe
auch nach, ob die Pinbelegung von RS, RW und Enable zutrifft!
Frägst Du das Busyflag ab?
LcdE equ (Pin)0 ; RB0 1->0 (toggle) H->L moves Data into the LCD
LcdRw equ (Pin)1 ; RB1 0/1 write to/read from LCd-Databus
LcdRs equ (Pin)2 ; RB2 0/1 write data Data/Instruction to LCD
Im Code ist das LCD korrekt als 2zeilig initialisiert. Ich selbst
verwende seit langer Zeit die LCD-Initialisierung, OutLcdControl,
OutLcdData und LcdBusy von sprut und hatte nie Probleme damit.
Ich habe mir mal das Datenblatt NDM162 angesehen und es ist
HD44780-konform.
Prüfe Dein Display doch einfach so:
movlw b'10000000' ;DDRAM-Adresse Zeile 1, Digit 0
Call OutLcdControl ;LCD-Instruction
movlw "A" ;ASCII "A" zum LCD senden
Call OutLcdDaten ;Zeichenausgabe
Noch ein Tip: Wenn ich ein Programm mit LCD "bastele" gebe ich immer
zuerst einen simplen LCD-Text "Hallo" aus, damit ich sicher gehen kann,
dass wenigstens mein LCD funktioniert.
mfG Ottmar
Hallo Ottmar,
Die Pins am LCD und am Controller stimmen.
RB0(Pin6)=Enable
RB1(Pin7)=R/W
RB2(Pin8)=RS
Der Code ist von sprut nicht von mir.
Ottmar K. schrieb:> Prüfe Dein Display doch einfach so:>> movlw b'10000000' ;DDRAM-Adresse Zeile 1, Digit 0> Call OutLcdControl ;LCD-Instruction>> movlw "A" ;ASCII "A" zum LCD senden> Call OutLcdDaten ;Zeichenausgabe
Das verstehe ich nicht ganz. Kannst du mir ein Assembler Programm
Schnippsel zu kommen lassen, nur für das LCD?
Ich versuche gerade das mal aus dem "sprut Code" heraus zu basteln mal
sehen ob es geht.So das nur ein zeichen an das LCd gesendet wird als
Test. Mit spruts Pin Belegung.
Hallo Dave,
Habe den Code zur simplen LCD-Ausgabe für Dich passend gemacht und mal
schnell auf einen 16F628 gebrannt. funktionert! Allerdings verwende ich
eine andere Pin-Konfiguration, weil der RB0 so praktisch ist und einen
Interrupt auslösen kann. Das kannst Du aber wie unter beschrieben
ändern.
Entpacke beiliegendes Zip-File in EINEN Ordner, eröffne darin ein neues
Project. im Project-Fenster lädst Du das ASM-File und im selben Fenster
unter "Header-Files" "HD44780.INC hinzu.
Störe Dich bitte nicht am Label "LCD_LAT" diesem wird im ASM-File der
Inhalt = "PORTB" zugewiesen. Das muss so sein, weil die
LCD-Initialisierung mit HD44780.INC auch für andere Pics und nicht nur
für den 16F628 verwendet werden kann. Der 16F628 hat nun mal kein
LATB-Register
Im ASM-File änderst Du nur noch die Labels
RS equ 0 ;0/1 write data Data/Instruction to LCD
RW equ 1 ;0/1 write tot/read from LCd-Databus
E equ 2 ;1->0 enable H->L moves Dats into the LCD
entsprechend Deiner Pin-Konfiguration um
so zum Beispiel:
E equ 0 ; enable Lcd
RW equ 1 ; read Lcd (nicht write)
RS equ 2 ; Daten Lcd (nicht control)
Viel Erfolgt, bei Fragen meldest Du Dich nochmals, ich schau heute noch
mal ins Forum rein
mfg Ottmar
Ich hab den Code geändert, gebrannt aber das Display zeigt weiterhin nur
die Schwarzen Rechtecke an.Zur Übersicht das geänderte Hexfile
angehängt.
Es ist zum verzweifeln. irgendwo ist ein Fehler drin. Ich mache gleich
noch Fotos vom Aufbau und lade sie hoch!
Hallo Dave,
Schade, dass es nicht geklappt hat. Also mein Code stimmt 100%ig, indem
ich diesen wie schon mitgeteilt vor dem Versenden auf nen PIC 16F628
gebrannt und ausgeführt habe.
Probleme sind da um gelöst zu werden. Schau Dir doch mal die Anschlüsse
von und zum Display mit der Lupe an. Sind da irgendwelche Kurzschlüsse
zwischen den Kontaktpins/Drähten?
Ich teste immer meine Projekte mit einer der
Sprut-18/28pin-Testplatinen.
Anbei ein Bild vom funktionierenden LCD
mfg Ottmar
Hallo Dave!
Dein ASM-File "frq_uni_628.asm" habe ich jetzt mal gecheckt. Es enthält
KEINEN Fehler, das Hexfile welches ich erzeugt und in den PIC gebrannt
habe funktioniert! Es erscheint die Anzeige 00:00:00.
Also - wie vermutet LCD-Anschlüsse prüfen!!
mfG Ottmar
PS: Ich schau mir jetzt mal die Eröffnung von Olymbia 2012 an.
Stefan schrieb:> Schreib mal die Pinbelegung des Displays auf,> wo was angeschloßen ist. Und mit welcher Frequenz> das ganze läuft. Schick dann mal ein File zum Testen.
16F628A Pinbelegung LCD 2x16 Zeichen (HD44780) Ansteuerung 4 Bit Modus
RB0 Pin6 = Enable
RB1 Pin7 = R/W
RB2 Pin8 = RS
RB4 Pin10 = D4
RB5 Pin11 = D5
RB6 Pin12 = D6
RB7 Pin13 = D7
Takt 10MHz (Quarz mit 33p Stützkondensatoren)
Quarz schwingt mit 10.000042MHz Pk-Pk 500mV schöner Sinus.
Ottmar K. schrieb:> Hallo Dave,> Schade, dass es nicht geklappt hat. Also mein Code stimmt 100%ig, indem> ich diesen wie schon mitgeteilt vor dem Versenden auf nen PIC 16F628> gebrannt und ausgeführt habe.> Probleme sind da um gelöst zu werden. Schau Dir doch mal die Anschlüsse> von und zum Display mit der Lupe an. Sind da irgendwelche Kurzschlüsse> zwischen den Kontaktpins/Drähten?> Ich teste immer meine Projekte mit einer der> Sprut-18/28pin-Testplatinen.> Anbei ein Bild vom funktionierenden LCD>> mfg Ottmar
Ich habe es pur also nur LCD,PIC,Quarz,MCRL + 10k Pullup und 10k Poti
für Kontrast LCD auf einen Steckbrett aufgebaut!Kamera Akkus laden
gerade Fotos folgen in 30 Minuten.
Hallo Dave,
Beiliegend der Ausschnitt aus dem Datenblatt zur Pinblegung. Steckboard
ist immer störanfällig, überhaupt wenn es älter ist und auch mal dickere
Drähte /Bauteilanschlüsse gesteckt wurden. Kontaktprobleme sind da nie
auzuschließen
Mir ist da ein Testboard mit LED-Kontrolle der µC-Pins lieber. So müte
Dein Konfiguration aussehen:
LCD PIC
4 RS RB2
5 R/W RB1
6 E RB0
11 DB4 RB4
12 DB5
13 DB6
14 DB7 RB7
mfg Ottmar
P.S.: Olympia-Eröffnungsfeier - very britishc!
Ich habe den gleichen Zähler gebaut. Er funktioniert ohne Probleme.
Einzige Änderung: ich habe noch eine Verstärkungstuffe mit einem
Transistor zusätzlich eingebaut für den Bereich bis 50 MHz.
Beitrag "Sprut 2 Hz 1-GHz-Frequenzzähler"