05 ottobre 10, 01:50 | #1 (permalink) Top |
User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| PIC 16F628, ricezione seriale..
salve, lavorando con il 16F628 e tendando di ricevere ed inviare Byte da un software in java attraverso la porta seriale, trovo delle difficoltà: Faccio una premessa, uso la MAx232 per trasformare il segnale EIA in TTL, poi uso il seguente include: LIST ; P16F628.INC Standard Header File, Version 1.01 Microchip Technology, Inc. NOLIST ; This header file defines configurations, registers, and other useful bits of ; information for the PIC16F628 microcontroller. These names are taken to match ; the data sheets as closely as possible. ; Note that the processor must be selected before this file is ; included. The processor may be selected the following ways: ; 1. Command line switch: ; C:\ MPASM MYFILE.ASM /PIC16F628 ; 2. LIST directive in the source file ; LIST P=PIC16F628 ; 3. Processor Type entry in the MPASM full-screen interface ;================================================= ========================= ; ; Revision History ; ;================================================= ========================= ;Rev: Date: Reason: ;1.01 13 Sept 2001 Added _DATA_CP_ON and _DATA_CP_OFF ;1.00 10 Feb 1999 Initial Release ;================================================= ========================= ; ; Verify Processor ; ;================================================= ========================= IFNDEF __16F628 MESSG "Processor-header file mismatch. Verify selected processor." ENDIF ;================================================= ========================= ; ; Register Definitions ; ;================================================= ========================= W EQU H'0000' F EQU H'0001' ;----- Register Files------------------------------------------------------ INDF EQU H'0000' TMR0 EQU H'0001' PCL EQU H'0002' STATUS EQU H'0003' FSR EQU H'0004' PORTA EQU H'0005' PORTB EQU H'0006' PCLATH EQU H'000A' INTCON EQU H'000B' PIR1 EQU H'000C' TMR1L EQU H'000E' TMR1H EQU H'000F' T1CON EQU H'0010' TMR2 EQU H'0011' T2CON EQU H'0012' CCPR1L EQU H'0015' CCPR1H EQU H'0016' CCP1CON EQU H'0017' RCSTA EQU H'0018' TXREG EQU H'0019' RCREG EQU H'001A' CMCON EQU H'001F' OPTION_REG EQU H'0081' TRISA EQU H'0085' TRISB EQU H'0086' PIE1 EQU H'008C' PCON EQU H'008E' PR2 EQU H'0092' TXSTA EQU H'0098' SPBRG EQU H'0099' EEDATA EQU H'009A' EEADR EQU H'009B' EECON1 EQU H'009C' EECON2 EQU H'009D' VRCON EQU H'009F' ;----- STATUS Bits -------------------------------------------------------- IRP EQU H'0007' RP1 EQU H'0006' RP0 EQU H'0005' NOT_TO EQU H'0004' NOT_PD EQU H'0003' Z EQU H'0002' DC EQU H'0001' C EQU H'0000' ;----- INTCON Bits -------------------------------------------------------- GIE EQU H'0007' PEIE EQU H'0006' T0IE EQU H'0005' INTE EQU H'0004' RBIE EQU H'0003' T0IF EQU H'0002' INTF EQU H'0001' RBIF EQU H'0000' ;----- PIR1 Bits ---------------------------------------------------------- EEIF EQU H'0007' CMIF EQU H'0006' RCIF EQU H'0005' TXIF EQU H'0004' CCP1IF EQU H'0002' TMR2IF EQU H'0001' TMR1IF EQU H'0000' ;----- T1CON Bits --------------------------------------------------------- T1CKPS1 EQU H'0005' T1CKPS0 EQU H'0004' T1OSCEN EQU H'0003' NOT_T1SYNC EQU H'0002' TMR1CS EQU H'0001' TMR1ON EQU H'0000' ;----- T2CON Bits --------------------------------------------------------- TOUTPS3 EQU H'0006' TOUTPS2 EQU H'0005' TOUTPS1 EQU H'0004' TOUTPS0 EQU H'0003' TMR2ON EQU H'0002' T2CKPS1 EQU H'0001' T2CKPS0 EQU H'0000' ;----- CCP1CON Bits --------------------------------------------------------- CCP1X EQU H'0005' CCP1Y EQU H'0004' CCP1M3 EQU H'0003' CCP1M2 EQU H'0002' CCP1M1 EQU H'0001' CCP1M0 EQU H'0000' ;----- RCSTA Bits --------------------------------------------------------- SPEN EQU H'0007' RX9 EQU H'0006' SREN EQU H'0005' CREN EQU H'0004' ADEN EQU H'0003' FERR EQU H'0002' OERR EQU H'0001' RX9D EQU H'0000' ;----- CMCON Bits --------------------------------------------------------- C2OUT EQU H'0007' C1OUT EQU H'0006' C2INV EQU H'0005' C1INV EQU H'0004' CIS EQU H'0003' CM2 EQU H'0002' CM1 EQU H'0001' CM0 EQU H'0000' ;----- OPTION Bits -------------------------------------------------------- NOT_RBPU EQU H'0007' INTEDG EQU H'0006' T0CS EQU H'0005' T0SE EQU H'0004' PSA EQU H'0003' PS2 EQU H'0002' PS1 EQU H'0001' PS0 EQU H'0000' ;----- PIE1 Bits ---------------------------------------------------------- EEIE EQU H'0007' CMIE EQU H'0006' RCIE EQU H'0005' TXIE EQU H'0004' CCP1IE EQU H'0002' TMR2IE EQU H'0001' TMR1IE EQU H'0000' ;----- PCON Bits ---------------------------------------------------------- OSCF EQU H'0003' NOT_POR EQU H'0001' NOT_BO EQU H'0000' NOT_BOR EQU H'0000' NOT_BOD EQU H'0000' ;----- TXSTA Bits ---------------------------------------------------------- CSRC EQU H'0007' TX9 EQU H'0006' TXEN EQU H'0005' SYNC EQU H'0004' BRGH EQU H'0002' TRMT EQU H'0001' TX9D EQU H'0000' ;----- EECON1 Bits --------------------------------------------------------- WRERR EQU H'0003' WREN EQU H'0002' WR EQU H'0001' RD EQU H'0000' ;----- VRCON Bits --------------------------------------------------------- VREN EQU H'0007' VROE EQU H'0006' VRR EQU H'0005' VR3 EQU H'0003' VR2 EQU H'0002' VR1 EQU H'0001' VR0 EQU H'0000' ;================================================= ========================= ; ; RAM Definition ; ;================================================= ========================= __MAXRAM H'01FF' __BADRAM H'07'-H'09', H'0D', H'13'-H'14', H'1B'-H'1E' __BADRAM H'87'-H'89', H'8D', H'8F'-H'91', H'93'-H'97', H'9E' __BADRAM H'105', H'107'-H'109', H'10C'-H'11F', H'150'-H'16F' __BADRAM H'185', H'187'-H'189', H'18C'-H'1EF' ;================================================= ========================= ; ; Configuration Bits ; ;================================================= ========================= _BODEN_ON EQU H'3FFF' _BODEN_OFF EQU H'3FBF' _CP_ALL EQU H'03FF' _CP_75 EQU H'17FF' _CP_50 EQU H'2BFF' _CP_OFF EQU H'3FFF' _DATA_CP_ON EQU H'3EFF' _DATA_CP_OFF EQU H'3FFF' _PWRTE_OFF EQU H'3FFF' _PWRTE_ON EQU H'3FF7' _WDT_ON EQU H'3FFF' _WDT_OFF EQU H'3FFB' _LVP_ON EQU H'3FFF' _LVP_OFF EQU H'3F7F' _MCLRE_ON EQU H'3FFF' _MCLRE_OFF EQU H'3FDF' _ER_OSC_CLKOUT EQU H'3FFF' _ER_OSC_NOCLKOUT EQU H'3FFE' _INTRC_OSC_CLKOUT EQU H'3FFD' _INTRC_OSC_NOCLKOUT EQU H'3FFC' _EXTCLK_OSC EQU H'3FEF' _LP_OSC EQU H'3FEC' _XT_OSC EQU H'3FED' _HS_OSC EQU H'3FEE' LIST Ho il sospetto che il problema stia nell'oscillatore interno... qualcuno ha avuto lo stesso problema? |
05 ottobre 10, 11:12 | #2 (permalink) Top | |
User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| dimenticavo il file asm!
scusate dimenticavo la parte più importante il programma in assembler! ;************************************************* ****************** ; TITLE: Demo Ricezione Seriale, ; CREATED BY: Fausto Giudice ; CONTACT: fausto.giudice@gmail.com ; DATE: 18-set-2010 ;************************************************* ****************** PROCESSOR 16F628 RADIX DEC INCLUDE "P16F628.INC" __CONFIG 11110100010000B ORG 0x000 ; Program starts at 0x000 ; ; ---------------- ; INIZIALIZZA LE PORTE ; ---------------- ; bsf STATUS,RP0 ; Attiva il banco 1 movlw b'00000000' ; La porta A, avrà dei led che mostreranno il byte ricevuto movwf TRISA movlw b'00000100' ; Il bit di posto 2 della porta B riceve dalla MAx232 i bit movwf TRISB ; che compongono il Byte ; ; ---------------- ; CONFIGURAZIONE VELOCITA E REGISTRO DI RICEZIONE ; ---------------- ; movlw 0x19 ; 0x19=9600 bps movwf SPBRG bcf STATUS,RP0 ; Ritorna al Banco 0 movlw b'10010000' ; Abilita la Ricezione Asincrona movwf RCSTA MAIN call RICEZIONE movwf PORTA ; invia alla porta A il byte ricevuto goto MAIN RICEZIONE btfss PIR1,RCIF ; Controlla il bit RCIF se = 1 allora legge RCREG goto RICEZIONE movf RCREG,W return END Citazione:
| |
05 ottobre 10, 19:58 | #3 (permalink) Top |
User Data registr.: 21-01-2004 Residenza: Milano
Messaggi: 989
|
L'errore è nella programmazione del baud rate: se usi l'oscillatore interno, la frequenza del clock è 4 Mhz e per avere 9600 baud devi impostare 25 nel registro SPBRG, ma devi settare il bit BRGH, altrimenti funziona a 2,4K. michele
__________________ __________________________________________________ The worst day flying is better than the best day working. |
07 ottobre 10, 13:58 | #5 (permalink) Top |
User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| ok
si su pagina 73 e 79 del datasheet .. ho trovato la tua osservazione... l'errore è avvenuto perchè siccome non mi serve la trasmissione è quindi non ho settato il registro TXREG .. comunque al momento credo che sia meglio che mi studi il datasheet, pittosto che orientarmi sulla base di altri progetti recuperati nella rete. Altro problema sono le porte A e B , perchè la RB2 deve essere usata come TX mentre la RB1 come RX comunque grazie ti terrò aggiornato dello sviluppo... a dopo fausto |
07 ottobre 10, 19:17 | #6 (permalink) Top | |
User Data registr.: 21-01-2004 Residenza: Milano
Messaggi: 989
| Citazione:
Michele
__________________ __________________________________________________ The worst day flying is better than the best day working. | |
12 ottobre 10, 00:39 | #7 (permalink) Top |
User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| ok
si ho un oscilloscopio.. ...comunque leggendo il datasheet vien fuori che 4.000.000 / 416 = 9615 cioè il Baud rate desiderato dove il 416 vien fuori dal seguente calcolo SPBRG = 25 416 = 16 *(25 +1) |
15 ottobre 10, 09:33 | #8 (permalink) Top |
User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| news
dunque ..per prima cosa il circuito per trasformare il segnale EIA in TTL con la max232 adesso è corretto, vedi attach, si tratta di mettere cinque condensatori.. di cui 4 da 1uF e 1 da 10uF nei piedini visibili nella foto.. Per il discorso 16F628 in sostanza occorre avere gli interrupt attivi ovvero il registro PIE1 bit 5 & 4. Occorre impostare la velocita in modo corretto come già spiegato. assicurarsi che nel TXSTA il bit SYNC sia = 0 e il bit TXEN & BRGH siano = 1 inoltre RCSTA il bit SPEN & SREN siano = 1 dopo di che potremo interrogare i bit RCIF & TXIF per sapere se arrivano dati oppure se ha finito di trasmettere e quindi.. il gioco è fatto!!! |
16 ottobre 10, 12:21 | #10 (permalink) Top |
User Data registr.: 12-04-2006 Residenza: Mondovì
Messaggi: 103
|
Credo che sia importante capire se il problema sia hardware o firmware. Se hai un oscilloscopio puoi controllare cosa esce, ad esempio buttando fuori ciclicamente (ed in continuo) e controllando così il baudrate (se corrisponde al teorico), oppure utilizzare un simulatore e vedere se quanto hai scritto corrisponde a quanto viene eseguito. Il simulatore è importante perchè se le cose non funzionano ti da qualche indicazione in più che, normalmente, non hai. Come simulatore puoi usare il Proteus (che costa molti soldi) oppure questo che costa molto meno e che puoi usare in demo per una decina di volte, il tempo di capire cosa non funziona. PIC Simulator IDE with Basic Compiler, Assembler, Disassembler and Debugger |
Bookmarks |
| |
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
alimentazione pic 16f628 | gungun | Circuiti Elettronici | 6 | 04 settembre 09 01:05 |
Interfaccia seriale -> notebook senza porta seriale | francyflyer | Simulatori | 4 | 10 marzo 06 18:48 |
Modulo USART 16F628 | SoldatoSemplice | Circuiti Elettronici | 1 | 06 marzo 06 19:20 |
Schemi - Regolatore con Pic 16F628 | BaroneRosso | News | 0 | 17 giugno 05 16:07 |
regolatore di giri con pic 16f628 | fabari | Circuiti Elettronici | 5 | 23 marzo 05 22:02 |