hey, ich habe mal ne frage zum baustein. Ich bin nun schon über eine woche dabei den zum laufen zu bringen aber es klappt einfach net. er bekommt anscheind keine verbindung, zeigt immer nur 255 an. zur hardware: pcf8583p 2x Pull 1,8k 22pf kerko ; wollte erstmal nur zum laufen bringen, daher kein trimmbaren 32,786khz adresspin auf gnd habe mir ne kleine platine gebaut, um somit alle möglichen kontaktfehler auszuschließen. ich habe z.b. keine porbleme damit eine chipkarte zu beschreiben und zu lesen. würde mich also sehr über gute vorschläge freuen. gruß andré list p=16f877A ;* PORTB: O ;* 0 - LED ;* 1 - LED ;* 2 - LED ;* 3 - LED ;* 4 - LED ;* 5 - LED ;* 6 - LED ;* 7 - LED ;* PORTC: I/O ;* 0 - ;* 1 - ;* 2 - ;* 3 - SCL ;* 4 - SDL ;* 5 - ;* 6 - ;* 7 - ; Taktquelle: 4 MHz #include <P16f877A.INC> __CONFIG _PWRTE_ON & _WDT_OFF & _HS_OSC & _LVP_OFF RXDATA equ 0x30 loops equ 0x35 loops2 equ 0x36 Sekunden equ 0x37 org 0x00 Init bsf STATUS, RP0 movlw B'00000000' ; I/O movwf TRISB bcf STATUS, RP0 clrf PORTB clrf RXDATA ;***************** I²C Einstellungen******************************* bsf STATUS, RP0 movlw B'11111111' movwf TRISC bcf STATUS, RP0 bsf STATUS, RP0 movlw d'9' ; auf 100 MHz movwf SSPADD ; bcf STATUS, RP0 movlw B'00001000' ; mastermode movwf SSPCON ; bsf SSPCON, SSPEN ; MSSP-Modul enable ;***************** ID auslesen *********************** call i2c_on ; movlw 0xA0 ; Uhr zum Schreiben adressieren call i2c_tx ; movlw 0x02 ; Datenbyte adressieren call i2c_tx ; movlw d'20' ; Sekunden schreiben call i2c_tx ; call i2c_off ; Bus freigeben start movlw 0xA0 ; Uhr zum Schreiben adressieren call i2c_tx ; movlw 0x02 ; Datenbyte adressieren call i2c_tx ; call i2c_off ; Bus freigeben ;*********************** Lesen der Karte ************* call i2c_on ; Bus aktiv movlw 0xA1 ; 1010 0001 call i2c_tx ; Uhr zum lesen adressieren call i2c_rx movfw SSPBUF ; I2C Empfangsregister auslesen movwf RXDATA ; Byte in Speicherzelle RXDATA retten call i2c_off ; Bus freigeben movfw RXDATA ; movwf PORTB goto start ;***I2C UNTERPROGRAMME********************************************************** ** ; ; I2C-Bus im Master-Mode übernehmen i2c_on bcf PIR1, SSPIF ; SSPIF Bit löschen bsf STATUS, RP0 bsf SSPCON2, SEN ; Bus Übernahme anweisen bcf STATUS, RP0 goto i2c_warte ; ein Byte aus W senden i2c_tx movwf SSPBUF ; -> zum I2C-Slave übertragen goto i2c_warte ;ein Byte vom Slave empfangen (nach SSPBUF) i2c_rx bsf STATUS, RP0 bsf SSPCON2, RCEN ; Daten Empfang einschalten bcf STATUS, RP0 goto i2c_warte ; I2C-Bus wieder freigeben i2c_off bsf STATUS, RP0 bsf SSPCON2, PEN ; Bus Freigabe anweisen bcf STATUS, RP0 i2c_warte btfss PIR1, SSPIF ; fertig? goto i2c_warte ; nein, noch nicht bcf PIR1, SSPIF ; ja, alles fertig, nun noch SSPIF zurücksetzen return Wait movwf loops Wai movlw .110 ; Zeitkonstante für 1ms movwf loops2 Wai2 nop ; nop nop nop nop nop decfsz loops2, F ; 1 ms vorbei? goto Wai2 ; nein, noch nicht ; decfsz loops, F ; 250 ms vorbei? goto Wai ; nein, noch nicht retlw 0 ; das Warten hat ein Ende ;***ENDE UNTERPROGRAMME********************************************************** end
Hi bsf SSPCON, SSPEN ; MSSP-Modul enable damit schaltest du den SPI Modus ein, sspen nicht setzen l-hase
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.