- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 38 von 38

Thema: RS232 funktioniert nicht

  1. #31
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.01.2005
    Beiträge
    103
    Anzeige

    E-Bike
    jop das hab ich

  2. #32
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Jetzt müssen wir sicherstellen, daß der Pic überhaupt läuft
    Mach VOR der Empfangsroutine eine dauerschleife, in der du die Leds einzeln aufdrehst. Das muß dann so aussehen, als ob alle gleichzeitig leuten würden.
    movlw 1
    movwf PORTB
    Schleife:
    rlf PORTB, f
    b Schleife
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #33
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.01.2005
    Beiträge
    103
    ok werd ich machen!!!!!

  4. #34
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.01.2005
    Beiträge
    103
    jop hab ich gemacht! und die leds leuchten wie imma!!

  5. #35
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Moment, moment
    RCSTA is ja in Bank 0
    bcf STATUS,RP0 ; Bank 0
    movlw 0x90 ; Empfänger: RS232
    movwf RCSTA ;

    uiiiiii
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #36
    Gast
    DANKE danke jetzt funktionierts endlich!!!!!!!!!

  7. #37
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2005
    Ort
    Schleswig-Holstein
    Alter
    38
    Beiträge
    17
    mal was anderes ....

    mein PIC hägnt sich auf oder so aufjeden fall macht er nach ner zeit nichtmehr das was er soll
    könnte natürlich mit nem WachtDogTimer machen aber wollte eigentlich raus lassen.
    Also RB1 geht high wenn er über RS232 binär 1 bekommt (und 3 eigentlich aus aber das war wegen was anderem und ist unwichtig)

    Wenn 1 kommt wird rb1 für die eingestellte zeit high
    so wenn ich aber ganz oft in der zeit 1sen schicke was das programm macht, also ohne pausen 00000001,00000001
    dann hängt der sich nach 3 mal auf an nem anderen rechner 4 mal
    wenn ich allerdings warte bis rb1 wieder low ist dann gehts ...

    so sollte es sein:
    RB1 high dann zeitverzögerung dann relais aus dann zeitverzögerung dann wieder abfrage RS232

    bin am fehlersuchen aber finde nichts ... code iss ok meiner meinung nach

    Code:
    
    
    		LIST P=16F628, R=DEC    ; Use the PIC16F628 and decimal system 
    
            #include "P16F628.INC"  ; Include header file 
    
            
         
    
            ORG    0x000            ; Programmstart bei 0x000 
    
    ; --------------------------------
    ; SET ANALOG/DIGITAL INPUTS PORT A
    ; --------------------------------
    
    		movlw 7					; lädt 7 in das W-Register
    		movwf CMCON				; Comperator 
    
    ; ---------------- 
    ; Init der Ports
    ; ---------------- 
    3
    
    
    
    		bsf STATUS,RP0			; Bank 1
    		movlw b'00100000'	
    		movwf PIE1				; USART Receive Interrupt Enable Bit wird gesetzt (RS232 Empfang ein)
    	
    		bcf STATUS,RP0			; Bank 0
    		movlw b'00000000'   	
            movwf PORTA				; alle low an PORTA
            
            movlw b'00000100'	
            movwf PORTB				; PORTB wird auf 00000100 gesetzt
    
            bsf STATUS,RP0      	; Bank 1
    
            movlw 0xFE				
            movwf TRISA				; bis auf RA0 alle Eingäng(high)
            movlw 0xFF 				
            movwf TRISB				; alle Eingänge RB1(RX)=Eingang 
    
    ; ------------------------------------
    ; BAUD RATE für Kommunikation mit dem PC wird gesetzt
    ; ------------------------------------
    ; Boot Baud Rate = 19200, No Parity, 1 Stop Bit
    
            movlw 0x0C              ; 0x0C=19200bps 0x19=9600bps
            movwf SPBRG				; Baud Rate 19200bps wird gesetzt
            movlw b'00000100'       ; brgh = high (2)
            movwf TXSTA             ; schaltet brgh high ein
            bcf STATUS,RP0          ; Bank 0
    
            movlw b'10010000'       
            movwf RCSTA				; schaltet seriellen Port ein 
    
    ; ---------
    ; MAIN LOOP
    ; ---------
    	
    loop    call receive       		; ruft Dateiempfang auf
    		call vergleich			; ruft ersten Vergleich auf
    		call vergleich2     	; ruft zweiten Vergleich auf        
            goto loop				; MAIN LOOP wird wiederholt
    
    ; -------------------------------------------
    ; SIGNALE VON DER RSR232 SCHNITTSTELLE EMPFANGEN
    ; -------------------------------------------
    	
    receive btfss PIR1,RCIF         ; checkt ob im register PIR1 das RCIF bit (USART Receive Interrupt Flagbit) wenn der receive buffer voll ist geht weiter
            goto receive			; das wird so lange abgefragt bis was empfangen wurde
            movf RCREG,0            ; speichert das Empfangende in W
            movwf 0x7F				; speichert das Empfangene in Speicherzelle 7F
    		return					; zurück zum MAIN LOOP
    
    ; -------------------------------------------------------------
    ; "VERGLEICHT" DIE BEIDEN SIGNALE
    ; -------------------------------------------------------------
    
    vergleich
    		movf 0x7F,0					; das aus der RS232 Empfange Byte in W schreiben
    		sublw 1						; das Signal wird mit 1 subtrahiert, wenn 0 herraus kommt wird Zero Bit gesetzt
    		btfss STATUS,Z				; wenn Zerobit gesetzt wurde, wird nächster Befehl übersprungen
    		return						; zurück zum MAIN LOOP
    		bsf PORTA,0 				; PORTA Bit 0 wird gesetzt(Ausgang Pin 17)
    		call verz							
    		bcf PORTA,0 				; PORTA Bit 0 wird gelöscht(Ausgang Pin 17)
    		call verz
    		return						; zurück zum MAIN LOOP
    			
    vergleich2
    		movf 0x7F,0					; das aus der RS232 Empfange Byte in W schreiben
    		sublw 3						; das Signal wird mit 3 subtrahiert, wenn 0 herraus kommt wird Zero Bit gesetzt
    		btfss STATUS,Z				; wenn Zerobit gesetzt wurde, wird nächster Befehl übersprungen
    		return						; zurück zum MAIN LOOP
    
    		bcf PORTA,0 				; PORTA Bit 0 wird gelöscht(Ausgang Pin 17)
    		return						; zurück zum MAIN LOOP
    
    
    ; --------------- 
    ; Verzögerung Einstellbar 250ms 
    ; --------------- 
    verz 	movlw   6				; einstellbar 1 = 250ms 4 = 1s
    		movwf	0x20
    verz2   movlw   250 
            movwf   0x21
    verz3   movlw   200 
            movwf   0x22 
    verz4   nop 
            nop 
            decfsz  0x22,1 
            goto    verz4				; verz4 loop = 5us 
            decfsz  0x21,1 
            goto    verz3 				; verz3 loop = 1000us
    		decfsz  0x20,1
    		goto    verz2				; verz2 loop = 250000us x verz1		
            return 
    	
    END
    hm ohne die zeitverzögerung und bcf im vergleich 1, kann man mit 1(RS232) rb1 high und mit 3 rb1 low schalten

  8. #38
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2005
    Ort
    Schleswig-Holstein
    Alter
    38
    Beiträge
    17
    habe es schon gelöst einfach nach den verzögerungen das CREN bit gecleart und nun gehts ^^ kA warum der das gemacht hat aber anscheind hatte der nen Overrun error.
    Also empfängt er Daten an RX obwohl nicht abgefragt wird ?

    mfg daniel

Seite 4 von 4 ErsteErste ... 234

Berechtigungen

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

Solar Speicher und Akkus Tests