PIC16F886 + USART = ofunk

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

PIC16F886 + USART = ofunk

Inlägg av bos »

Jag labbar med en PIC16F886 och försöker spotta ut lite data på serieporten, men den PC som är inkopplad på kabeln reagerar inte alls. Har provat både asynkront och synkront, men det blir samma fel (dvs ingenting).

PIC:en sitter på ett kopplingsdäck, har ingenting inkopplat utöver Wisp648, och har ingen gammal firmware i sig som skulle kunna störa (kör erase för varje programmering). PIC:ens Vss + TX + RX är kopplade till en Serial-to-USB-adapter, som sitter i PC:n som COM6, och Putty lyssnar på COM6. PIC:en är inställd på 9600bps, Putty likaså.

Är det något i koden jag missar? Den är i princip kattenpejstad från databladet.

Kod: Markera allt

#include <xc.h>

void putch(char data)
{
    while( ! TXIF)
        continue;
    TXREG = data;
}

void init_uart(void)
{

    // Async
/*    SPBRG = 12;             // 9600 baud @ 8 MHz
    TXEN = 1;               // enable transmitter
    BRGH = 0;               // de-select high baud rate
    BRG16 = 0;
    SYNC = 0;
    SPEN = 1;               // enable serial port
    CREN = 1;               // enable continuous operation
*/
    // Sync
    SYNC = 1;
    BRG16 = 0;
    CSRC = 1;
    SREN = 0;
    CREN = 0;
    SPEN = 1;
    TXEN = 1;
    SPBRG = 12;
    
}

void init_MCU() {
    OSCCON = 0b01110001;    // 8MHz INTOSC
    ANSEL = 0;              // No analog inputs
    TRISA = TRISB = 0;      // All outputs
    CM1CON0 = CM2CON0 = 0;  // Disable comparators
    INTCON = PEIE = 0;
    OPTION_REG = 0;
    
    init_uart();
}

void main() {
    init_MCU();

    for(;;) {
        putch('K');
        putch('o');
        putch('r');
        putch('v');
    }
}
Användarvisningsbild
Jan Almqvist
Inlägg: 1655
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: PIC16F886 + USART = ofunk

Inlägg av Jan Almqvist »

Har du rätt elektrisk nivå på dina signaler?

Jag känner inte till PIC men gissar att det är logik-nivå på Rx och Tx. Din Serial-to-USB-adapter kanske använder RS-232?

_________________________________________
http://www.idea-teknik.com/hmi_droid.html
Används i mer än 40 länder på 5 kontinenter.
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: PIC16F886 + USART = ofunk

Inlägg av bos »

Adapterns pinnar är märkta GND, TX och RX, så den ska vara på logiknivå.

Jag har även provat koppla in en grunka med en MAX232-krets på och köra via seriekabel, men det blir samma sak där (inget händer).
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: PIC16F886 + USART = ofunk

Inlägg av Icecap »

Har du kollat att TX pinnen rent faktisk reagerar?
Jag minns inte men är det analog funktion på de pinnar och har du stängd av den i så fall?

EDIT: och "while(!TXIF) continue;" känns väldigt fel!
Du ska dels vänta till TXIF kommer och när du sedan har lagt i data i TX-registret ska du nollställa TXIF.
Användarvisningsbild
SeniorLemuren
Inlägg: 8426
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: PIC16F886 + USART = ofunk

Inlägg av SeniorLemuren »

Har du en lysdiod på däcket så du kan konstatera att det kommer ut något från porten till att börja med?
Användarvisningsbild
Jan Almqvist
Inlägg: 1655
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: PIC16F886 + USART = ofunk

Inlägg av Jan Almqvist »

Mät med oscilloskop eller analog multimeter alternativt anslut lysdiod i serie med motstånd.

Om du sänder t.ex. en massa 'U' bör spänningen ungefär halveras jämfört med vila.

Eller sänd skurar av tecken med paus mellan och du bör kunna se flimmer på lysdioden.

_________________________________________
http://www.idea-teknik.com/hmi_droid.html
Används i mer än 40 länder på 5 kontinenter.
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: PIC16F886 + USART = ofunk

Inlägg av bos »

Såhär ser TX-pinnen ut när jag skickar ut strängen "Korven" i en oändlig loop. Det ser ut att vara alldeles för rytmiskt utan variation för att vara ett utskick.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
Jan Almqvist
Inlägg: 1655
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: PIC16F886 + USART = ofunk

Inlägg av Jan Almqvist »

Det ser ut som en baudrate-klocka. Jag får det till 153 kHz dvs 16 x 9600.

_________________________________________
http://www.idea-teknik.com/hmi_droid.html
Används i mer än 40 länder på 5 kontinenter.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46963
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: PIC16F886 + USART = ofunk

Inlägg av TomasL »

bos skrev:Adapterns pinnar är märkta GND, TX och RX, så den ska vara på logiknivå.

Jag har även provat koppla in en grunka med en MAX232-krets på och köra via seriekabel, men det blir samma sak där (inget händer).
Nej, det ärt det inte, Om du har en USB-Serieportsadapter, så har du mellan -15 och +15V på TX-linan.
Du måste använda en serieportsdriver, MAX232 eller liknande emellan, annars är det stor risk att du eldar upp din Processor.
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: PIC16F886 + USART = ofunk

Inlägg av bos »

Icecap skrev:EDIT: och "while(!TXIF) continue;" känns väldigt fel!
Du ska dels vänta till TXIF kommer och när du sedan har lagt i data i TX-registret ska du nollställa TXIF.
Den koden är klippt direkt från hjälpfilen (sida 1017) till Microchip XC8-kompilatorn. Provade nu att nollställa TXIF, men det blir samma fel.

Nu provade jag att stänga av PIC:ens serieport och köra en "blinka-led" på TX-pinnen. Den lyser konstant och oscilloskopet reagerar inte på några pulser.

Jag undrar om inte det här chippet är defekt. Ska prova byta ut det och se om så är fallet.
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: PIC16F886 + USART = ofunk

Inlägg av Icecap »

Jag litar aldrig på exempelkod - men den är oftast en god hjälp på vägen.

Men du har helt klart inte vald rätt ben som Tx! Du får ut synkronklockan och inte Tx - så välj rätt pinne istället för att byta krets.
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: PIC16F886 + USART = ofunk

Inlägg av bos »

TomasL skrev:Nej, det ärt det inte, Om du har en USB-Serieportsadapter, så har du mellan -15 och +15V på TX-linan.
Du måste använda en serieportsdriver, MAX232 eller liknande emellan, annars är det stor risk att du eldar upp din Processor.
Baksidan på adaptern säger "USB-TTL".
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC16F886 + USART = ofunk

Inlägg av sodjan »

> Den koden är klippt direkt från hjälpfilen (sida 1017) till Microchip XC8-kompilatorn.

Vilken "hjälpfil" ?? Manualen har inte så många sidor...
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: PIC16F886 + USART = ofunk

Inlägg av bos »

Den till XC8, som sagt.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: PIC16F886 + USART = ofunk

Inlägg av bos »

4 brända timmar senare har jag hittat felkällan; USB-adaptern.

Med en hembyggd hjälpkrets körandes MAX232 och en DB9-kontakt direkt till datorn får jag upp tecken i Putty. De är dock skräp så jag misstänker att räknat ut fel värde till SPBRG, men den biten får jag lösa en annan dag.
Skriv svar