- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 24

Thema: PIC LCD Ansteuerung

  1. #11
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    16.05.2004
    Beiträge
    304
    Anzeige

    Praxistest und DIY Projekte
    Hallo erstmal!

    Wenn du schon mal C++ programmiert hast, würdest du dir vielleicht leichter tun, den PIC mit C zu programmieren. Dabei ist die LCD Ansteuerung auch etwas übersichtlicher. Kostenlose Version des HiTech Lite Compilers bekommst du von www.hitech.com

    Wenn du nur in einer Zeile einen schwarzen Balken hast, dann ist das Display noch nicht initialisiert. Da du aber das Sprut Programm drauf hast, schätz ich dass da ein Hardware Fehler vorliegt.

    Funktioniert deine J Taste wieder?

  2. #12
    Erfahrener Benutzer Begeisterter Techniker Avatar von Andre_S
    Registriert seit
    26.06.2005
    Beiträge
    357
    Hallo,

    habe leider nicht die Zeit Dein ganzes Programm anzuschauen, aber hast Du mal den Debugger benutzt um zu sehen was bei Dir passiert, nur mal so vom Ablauf.

    Was mir sofort auffällt:
    Du musst mal mehr auf Goto aufpassen, (Kennst Du den Unterschied zwischen Call und Goto?) da haut schon vieles nicht hin...

    Und ordne Deine Unterprogramme mal sinnvoll an, so siehst Du bei größeren Programmen kaum noch durch.


    Gruß André

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    15.03.2006
    Beiträge
    11
    Also für mich bestand der unterschied zwischen Call und goto einfach nur darin, dass ich bei CALL "return" am ende der Unterprogramme schreiben muss, damit der Pic von der gesprungenen Zeile aus wieder weiter geht. Ist das so korrekt?

    Das mit der Sprut LCD Ansteuerung ist etwas komisch. Ich hab es geschafft, dass das Display "Hallo" ausgibt, aber leider nur. wenn ich mit dem Finger PIN 3 (RA4/T0CLK) berühre... was könnte hier das Problem sein?

  4. #14
    Erfahrener Benutzer Begeisterter Techniker Avatar von Andre_S
    Registriert seit
    26.06.2005
    Beiträge
    357
    Yep,...

    Call ist Unterprogrammaufruf, nach call wird weiter abgearbeitet, aber doch nicht nach Goto.

    Nun schau Dir mal als Beispiel zwei Deiner Aufrufe an
    Code:
    Main 
            goto clrdisplay 
            goto Bereit 
    ...
    wie soll er von goto clrdisplay jemals zu goto Bereit kommen?


    Code:
    Alarm1 
            goto clrdisplay 
            movlw   'A' 
            movwf   LcdDaten 
            call   OutLcdDaten 
            movlw   'l'
    Oder wie soll er bei Aufruf Alarm1 wenn er zu crldisplay verzweigt mit dem Rest ab movlw 'A' weitermachen können.

    Da kommt er doch niemals hin...


    Gruß André

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    15.03.2006
    Beiträge
    11
    Ahsooo. jetz wirds mir klar. Logisch dass das was ich da gemacht hab recht sinnlos ist.

    Ich hab das mit dem Display gestern übrigens noch hinbekommen. Ich hab übersehen, dass MCLR lowaktiv ist und damit natürlichweise auch kein "Hallo" angezeigt werden kann.

    Danke Andre für deine Hilfe, ich werd mich ransetzen und mich wieder melden

    (Zu meinem J: ich sitze am Arbeitsrechner, da funktioniert das J einwandfrei, mein Laptop ist zur Reparatur, ohne J gehts halt doch nicht, da darf man sich nichts vormachen )

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    10.03.2005
    Ort
    Mannheim
    Alter
    40
    Beiträge
    32
    Das errinnert mich an mein 2. Aubildungsjahr, wobei der Beruf da noch Kommunikationselektroniker hieß. *g*

    Leider durften wir damals auch schon nicht in C programmieren.
    Und ich hab auch mit den selben Problemen gekämpft wie du!! *g*

    Aber immerwieder schön zusehen, dass man nicht als einziger mit den Problemen zu kämpfen hatte!!

    Kleiner Tipp:

    Sobald du nicht mehr in Assembler programmieren musst. Steig um auf C! Das macht dann erst richtig Spaß!!! *lol*

    Also viel Spaß noch beim Basteln.

    Gruß
    Stefan

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    15.03.2006
    Beiträge
    11
    Guten morgen!!!

    Ich hab das Programm jetzt zum laufen bekommen. Es scheint hier und da noch etwas verbuggt, aber im großen und ganzen sollte es so funktionieren, bis auf eine Kleinigkeit...

    hier der code:

    Code:
      list P=16F84a.inc
    
    ;	PORTA: 	0 - 
    ;		1 -
    ;		2 -	
    ;		3 -
    ;		4 -
    ;	PORTB:	0 LCD Display E
    ;		1 		
    ;		2 LCD Display RS
    ;		3 LCD Display R/W	
    ;		4-7 LCD Display D4 .. D7
    
    #include <P16f84.INC>
     __CONFIG	_PWRTE_ON & _WDT_OFF & _XT_OSC
    
    
    
    w_copy	Equ	0x20
    s_copy	Equ	0x21
    LcdDaten  Equ	0x22
    LcdStatus Equ	0x23
    loops	EQU	0x24
    loops2	EQU	0x25
    
    ; Constanten festlegen
    
    PORTControl	equ	PORTB		 
    PORTData	equ	PORTB		         
    LcdEnable	equ	0		 
    LcdRw	equ	3		         
    LcdRs	equ	2		         	
    Ini_con Equ	B'00000000'	         
    Ini_opt	Equ	B'00000010'	
    
    
    
    Init	bsf     STATUS, RP0	 
    	movlw   Ini_opt     	 
    	movwf   OPTION_REG 
    	movlw	B'11111000'	 
    	movwf	TRISA		  
    	movlw	B'00000000'	 
    	movwf	TRISB
    	bcf     STATUS, RP0	 
    	clrf	PORTA		
    	clrf	PORTB		
    				
    	movlw   Ini_con     	 
    	movwf   INTCON  
        BSF     TRISA, 0
        bsf     TRISA, 1
        bsf     TRISA, 2
        bsf     TRISA, 3
        bsf     TRISA, 4 
    
    	call	InitLCD
        goto Main	
    
    InitLCD
    	movlw	D'255'		 
    	movwf	loops	
    	call	WAIT		
    
    	movlw	B'00110000'	 
    	movwf	PORTB
    	bsf	PORTB, LcdEnable
    	nop	
    	bcf	PORTB, LcdEnable
    	
    	movlw	D'50'		 
    	movwf	loops
    	call	WAIT
    	
    	movlw	B'00110000'	 
    	call	Control8Bit
    	movlw	B'00110000'	 
    	call 	Control8Bit
    	movlw	B'00100000'	 
    	call 	Control8Bit
    
    	movlw	B'00000001'	 
    	call	OutLcdControl	
    	movlw	B'00101000'	 
    	call	OutLcdControl	
    	movlw	B'00001000'	 
    	call	OutLcdControl
    	movlw	B'00000110'	 
    	call	OutLcdControl
    	movlw	B'00000011'	 
    	call	OutLcdControl
    	movlw	B'00001111'	 
    	call	OutLcdControl
    	return	
    
    Control8Bit
    	movwf	PORTB
    	bsf	PORTB, LcdEnable
    	nop
    	bcf	PORTB, LcdEnable
    	movlw	D'10'
    	movwf	loops
    	call 	WAIT
    	return 
    
    OutLcdControl
    	movwf	LcdDaten
    	call	LcdBusy
    	movf	LcdDaten, w
    	andlw	H'F0'
    	movwf	PORTData		 
    	bsf	PORTControl, LcdEnable
    	nop
    	bcf	PORTControl, LcdEnable	 
    	swapf	LcdDaten, w
    	andlw	H'F0'
    	movwf	PORTData		 
    	bsf	PORTControl, LcdEnable
    	nop
    	bcf	PORTControl, LcdEnable	 
    	return
    
    WAIT
    top      movlw   .110            
             movwf   loops2
    top2     nop                     
             nop
             nop
             nop
             nop
             nop
             decfsz  loops2, F       
             goto    top2            
                                     
             decfsz  loops, F        
             goto    top             
             retlw   0               
    
    LcdBusy
    	bsf	PORTA, 1	 
            bsf     STATUS, RP0	 
    	movlw	B'11110000'
    	iorwf   TRISB, f 
            bcf     STATUS, RP0
    BusyLoop		
    	bcf	PORTControl, LcdRs
    	bsf	PORTControl, LcdRw	 
    	bsf	PORTControl, LcdEnable
    	nop
    	movf	PORTData, w
    	movwf	LcdStatus
    	bcf	PORTControl, LcdEnable
    	nop
    	bsf	PORTControl, LcdEnable	
    	nop
    	bcf	PORTControl, LcdEnable
    	btfsc	LcdStatus, 7	 
    	goto	BusyLoop
    	bcf	PORTControl, LcdRw
            bsf     STATUS, RP0	 
    	movlw	B'00001111'
    	andwf   TRISB, f    
            bcf     STATUS, RP0
    	bcf	PORTA, 1	 
    	return	
    
    OutLcdDaten
    	bsf	PORTA, 2	 
    	movwf	LcdDaten
    	call	LcdBusy
    	movf	LcdDaten, w
    	andlw	H'F0'
    	movwf	PORTData		 
    	bsf	PORTControl, LcdRs	 
    	bsf	PORTControl, LcdEnable	 
    	nop
    	bcf	PORTControl, LcdEnable	 	
    	swapf	LcdDaten, w
    	andlw	H'F0'
    	movwf	PORTData		 
    	bsf	PORTControl, LcdRs	 
    	bsf	PORTControl, LcdEnable
    	nop
    	bcf	PORTControl, LcdEnable	 
    	bcf	PORTControl, LcdRs	 
    	bcf	PORTA, 2	 
    	return
    
    		
     
    Bereit
    
        movlw	'B'
    	movwf	LcdDaten
    	call	OutLcdDaten
    	movlw	'e'
    	movwf	LcdDaten
    	call	OutLcdDaten
    	movlw	'r'
    	movwf	LcdDaten
    	call	OutLcdDaten
    	movlw	'e'
    	movwf	LcdDaten
    	call	OutLcdDaten
    	movlw	'i'
    	movwf	LcdDaten
    	call	OutLcdDaten
            movlw   't'
        movwf	LcdDaten
    	call	OutLcdDaten
        goto Maintop
    
    Main 
            CALL clrdisplay
            goto Bereit
    
    Maintop
            BTFSC  PORTA,0  
            goto   Alarm1
            btfsc  PORTA,1
            goto   Alarm2
            btfsc  PORTA,2
            goto   Alarm3
            btfsc  PORTA,3
            goto   Alarm4
            btfsc  PORTA,4
            goto   Alarm5
            goto Maintop
    
    Alarm1
            CALL clrdisplay
            movlw	'A'
    	    movwf	LcdDaten
    	    call	OutLcdDaten
    	    movlw	'l'
    	    movwf	LcdDaten
    	    call	OutLcdDaten
    	    movlw	'a'
    	    movwf	LcdDaten
    	    call	OutLcdDaten
    	    movlw	'r'
    	    movwf	LcdDaten
    	    call	OutLcdDaten
    	    movlw	'm'
    	    movwf	LcdDaten
    	    call	OutLcdDaten
            movlw   '1'
            movwf	LcdDaten
            call	OutLcdDaten
            goto check1
    
    Alarm2
            call clrdisplay
            movlw	'A'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'l'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'a'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'r'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'm'
        	movwf	LcdDaten
        	call	OutLcdDaten
            movlw   '2'
            movwf	LcdDaten
            call	OutLcdDaten
            Goto check2
    
    Alarm3
            call clrdisplay
            movlw	'A'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'l'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'a'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'r'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'm'
        	movwf	LcdDaten
        	call	OutLcdDaten
            movlw   '3'
            movwf	LcdDaten
            call	OutLcdDaten
            Goto check3
    
    Alarm4
            call clrdisplay
            movlw	'A'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'l'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'a'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'r'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'm'
        	movwf	LcdDaten
        	call	OutLcdDaten
            movlw   '4'
            movwf	LcdDaten
            call	OutLcdDaten
            Goto check4
    
    Alarm5
            call clrdisplay
            movlw	'A'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'l'
        	movwf	LcdDaten
        	call	OutLcdDaten
         	movlw	'a'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'r'
        	movwf	LcdDaten
        	call	OutLcdDaten
        	movlw	'm'
          	movwf	LcdDaten
        	call	OutLcdDaten
            movlw   '5'
            movwf	LcdDaten
            call	OutLcdDaten
            Goto check5
    
    check1
            btfsc PORTA,0
            goto check1
            CALL clrdisplay
            goto Main
            
    check2
            btfsc PORTA,1
            goto check2
            CALL clrdisplay
            goto Main
    
    check3
            btfsc PORTA,2
            goto check3
            CALL clrdisplay
            goto Main
    
    check4
            btfsc PORTA,3
            goto check4
            CALL clrdisplay
            Goto Main
    
    check5
            btfsc PORTA,4
            goto check5
            CALL clrdisplay
            Goto Main 
    
    clrdisplay
    
            movlw	D'255'		 
        	movwf	loops	
        	call	WAIT		
    
        	movlw	B'00110000'	 
        	movwf	PORTB
        	bsf	PORTB, LcdEnable
        	nop	
        	bcf	PORTB, LcdEnable
    	
        	movlw	D'50'		 
        	movwf	loops
        	call	WAIT
    	
        	movlw	B'00110000'	 
        	call	Control8Bit
        	movlw	B'00110000'	 
        	call 	Control8Bit
        	movlw	B'00100000'	 
        	call 	Control8Bit
    
        	movlw	B'00000001'	 
        	call	OutLcdControl	
        	movlw	B'00101000'	 
        	call	OutLcdControl	
        	movlw	B'00001000'	 
        	call	OutLcdControl
        	movlw	B'00000110'	 
        	call	OutLcdControl
        	movlw	B'00000011'	 
        	call	OutLcdControl
        	movlw	B'00001111'	 
        	call	OutLcdControl
        	return	
      
    end

    Port RA4 macht mir Probleme, er nimmt mein High nicht an... es passiert gar nichts. Muss ich noch eine andere Einstllung vornehmen, damit er als Eingang klassifiziert wird, oder hab ich sonst etwas vergessen?


    Hier hab ich auf Eingang geschalten:
    Code:
    Init	bsf     STATUS, RP0	 
    	movlw   Ini_opt     	 
    	movwf   OPTION_REG 
    	movlw	B'11111000'	 
    	movwf	TRISA		  
    	movlw	B'00000000'	 
    	movwf	TRISB
    	bcf     STATUS, RP0	 
    	clrf	PORTA		
    	clrf	PORTB		
    				
    	movlw   Ini_con     	 
    	movwf   INTCON  
        BSF     TRISA, 0
        bsf     TRISA, 1
        bsf     TRISA, 2
        bsf     TRISA, 3
        bsf     TRISA, 4
    Was hab ich falsch gemacht?

    Ich wünsch euch allen ne erfolgreiche Woche !

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    15.03.2006
    Beiträge
    11
    Korrektur


    Ich habe den RA4 probeweise nicht als Eingang deklariert, erfolgreich. es gibt aber leider noch ein Problem, dessen Lösung ich einfach nicht finde.

    Wenn ich einen High Pegel an Pin1 lege, passiert nur eins: Das Display geht aus (?)... nehme ich den High Pegel weg, so erscheint ganz kurz "Alarm3" auf dem Display und dann wieder "Bereit".

    Wo kann da das Problem liegen? Es ist ja eigentlich alles gleich programmiert... Gibt es eine Besonderhit an Pin 1? Oder sieht jemand einen Programmierfehler, der mir nicht auffällt?

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    10.03.2005
    Ort
    Mannheim
    Alter
    40
    Beiträge
    32
    könnte vielleicht daran hängen, dass du in den LCD-Routinen immernoch RA1,

    Code:
    LcdBusy 
       bsf   PORTA, 1
    .
    .
    .
    .
    bcf PORTA,1
    und

    Code:
    OutLcdDaten 
       bsf   PORTA, 2 
    .
    .
    .
    bcf PORTA,2
    drin stehen hast!!

    Ich würde zwar generell sagen, das es nichts ausmacht, da er den Befehl nicht übernimmt, wenn der PORT-Pin als Eingang geschaltet ist.

    Aber ich hab schon ganz andere Mysterien aufm PIC erlebt.

    Check das mal nach!

    Gruß
    Stefan

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    15.03.2006
    Beiträge
    11
    ...und es macht doch was aus...

    genau dasselbe ist mir dann auch aufgefallen. Probeweise ein ; davor gesetzt. Klappt... nur das der Fehler nun nicht mehr an pin1 sondern an pin 18 tranferriert wurde

    Dasselbe ; nochmal vor die andere... und schon liegt der Fehler nicht mehr an Pin 1... und auch nicht mehr an pin 18...sondern an pin17...

    ich wusste nicht weiter, also muss ich den Fehler wohl so hinnehmen. Alles rückgängig gemacht und hin nd her überlegt. Dann hab ich einfach beschlossen, auf pin1 meine Lichtschranke zu setzen. Gibt die ein Signal, dann nur Kurz. Den Rücksprung in "Bereit" entfernt, und ein Sleep hinten ran gesetzt. Nun erscheint bei einem Kurzen Impuls auf pin1 LICHTSCHRANKE auf dem Display...und bleibt. In meiner endschaltung werde ich dann wohl oder übel einen "Pseudo-Lichtschrankenreset"-Taster einbauen, der eben den ganzen Pic zurücksetzt.
    Nunja, eigentlich wollte ich noch ein paar andere Sachen mit einbauen, aber mitlerweile bin ich mit dem jetzigen Resultat zufrieden und hab erstmal die faxen mit dem Pic dick.

    Obwohl... ich bekomme doch Lust auf einen Quick Power On Self Test für meine Alarmanalge... gesteuert von meiner neuen Leidenschaft ^^

    Mal sehn was sich da berichten lässt ^^

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress