Hallo Forum,
ich habe ein Programm (MPLABX, PICKIT3) für den PIC16F1823 geschrieben,
das ich jetzt aufgrund des RAMs auf den PIC16F1825 portieren wollte. Mit
dem 1823 funktioniert alles bestens, die ID des RFM70 wird erfolgreich
ausgelesen. Wenn ich jedoch dasselbe Programm auf dem 1825 laufen lasse,
erhalte ich nur (per UART/RS232) Nullen. Ich dachte, der 1825 sei
einfach nur der große Bruder vom 2823 mit mehr RAM, etc.
INIT:
1 | void vInitSsp(void) //Buffer: SSP1BUF
|
2 | {
|
3 | INTCONbits.INTE = 1; //Enable Interrupt pin
|
4 | PIE1bits.SSP1IE = 0; //Enables the MSSP interrupt to determine when the transmission/reception has completed.
|
5 |
|
6 | OPTION_REGbits.INTEDG = 0; //Interrupt on falling edge of RB0/INT pin (RA2)
|
7 |
|
8 | CSN = 1; //Chip select active
|
9 |
|
10 | SSP1CON1bits.CKP = 0; //Wellenform Typ 3
|
11 | SSP1CON1bits.SSPEN = 1; //Enable SSP-Transmitting
|
12 | SSP1CON1bits.SSPM = 0000; // SPI Master mode, clock = FOSC/4
|
13 | SSP1CON1bits.WCOL = 0; //Clear write collusion detection bit
|
14 |
|
15 | SSP1STATbits.CKE = 1; //Wellenform Typ 3, read and write at rising edge
|
16 | SSP1STATbits.SMP = 0; //Input data sampled at middle of data output time
|
17 |
|
18 | BF = 0; //Clear buffer full flag, Receive complete
|
19 | PIR1bits.SSP1IF = 0; //Clear synchronous Serial Port (MSSP) Interrupt Flag bit
|
20 |
|
21 | APFCON0bits.SDOSEL = 0; //SDO on pin RC2, not RA4
|
22 | APFCON0bits.SSSEL = 0; //SS on pin RC3, not RA3
|
23 | }
|
Aufruf:
1 | UINT8 SPI_RW(UINT8 value)
|
2 | {
|
3 | SSP1BUF = value;
|
4 | while (!BF);
|
5 | value = SSP1BUF;
|
6 | return value;
|
7 | }
|
Kennt sich jemand aus, wo sich der PIC16F1825 und der 1823 bei der
Initialisierung unterscheiden? Uart stimmt, ein U kommt erfolgreich an.
Danke im Voraus,
Frederik