Tak jsem si po delší době opět začal hrát se starým picem. Starší programy jsem měl na jiném pc a už jsem ztratil zdrojáky. Když se pokouším zprovoznit si UART s PC tak narážím na zásadní problém. PIC nereaguje, v hlavní smyčce mám jen blikání ledkou, pokud je uart vypnutý, ledka bliká, pokud jej zapnu, ani se nerozsvítí. Programuju v C (PICC a Hi-tide). HW je v pořádku( i když používám převodník USB->RS232) protože ho programuji přes bootloader a tak to funguje. Mám pocit, že jsem jednou už podobnou věc řešil a pak to byla nějaká prkotina. Jenže teď už nemám sil to hledat, jsem ještě nějakej zničenej po silvestru a nezapaluje mi to. Tak třeba kdyby už někdo věděl…
Tady je init, vygeneroval to hitide:
[code]#include <htc.h>
/* Program device configuration word
- Oscillator = XT
- Watchdog Timer = Off
- Power Up Timer = On
- Brown Out Detect = On
- Low Voltage Program = Enabled
- Flash Program Write = Write Protection Off
- Background Debug = Disabled
- Data EE Read Protect = Off
- Code Protect = Off
*/
__CONFIG(XT & WDTDIS & PWRTEN & BOREN & LVPEN & WRTEN & DEBUGDIS & DUNPROT & UNPROTECT);
// Peripheral initialization function
void init(void){
/***** Common Code ****
* Timer 2 interrupt enabled.
* Usart TX interrupt enabled.
* Usart RX interrupt enabled.
* A2D interrupt enabled
/
PIE1 = 0b01110010;
/
* A2D Converter input (AN0) on RA0
* A2D Converter input (AN1) on RA1
* A2D Converter input (VREF-) on RA2
* A2D Converter input (VREF+) on RA3
/
TRISA = 0b00001111;
/
* Peripheral interrupts enabled
* Global interrupt disabled during initialization
*/
INTCON = 0b01000000;
/***** A2D Converter Code ****
* A2D module powered up
* Channel selected is AN0
* conversion clock is set at Fosc/8
*/
ADCON0 = 0b01000001;
/*
* Analog/Digital ports using configuration 14
* Format is right justified
*/
ADCON1 = 0b10001110;
/***** PortD Code ****
* Port directions: 1=input, 0=output
*/
TRISD = 0b00000000;
/***** Timer 2 Code ****
* Prescale ratio is 1:16
* Timer 2 is active
* Postscale ratio set to 1:16
*/
T2CON = 0b01111110;
/*
* Period register set to 0xFF
*/
PR2 = 0b11111111;
/***** Usart Code ****
* High speed baud rate generator enabled
* Usart in Asynchronous mode
* Usart transmission enabled
* TX in eight bit format
*/
TXSTA = 0b00100100;
/*
* Usart reception enabled
* RX in eight bit format
* Usart module disabled
*/
RCSTA = 0b00010000;
/*
* Baud rate is 19200
*/
SPBRG = 0b00001010;
ei(); // Global interrupts enabled
}
[/code]
Teď dokonce koukám, že tam mám, baud rate 19200, nejsem si jistej jestli to je ok. bootloader mi s tím nechtěl běhat, ale zkoušel jsem i 9600, které mám odzkoušené a taky bez úspěchu.
Tak problém spočívá nejspíš někde v přerušení…
Problém byl opravdu v přerušení kdybych si datasheet přečetl pečlivě tak to vim, protože jsem v TXREG neměl data, tak se pořád předávalo řízení přerušení.