Seriekommunikation mikroC

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Kalf
Inlägg: 249
Blev medlem: 5 november 2005, 09:59:45

Seriekommunikation mikroC

Inlägg av Kalf »

Hej.
Jag håller på med ett projekt där serielkommunikation mellan PC och microprocessor behövs. Jag använder en PC med XP och en PIC16F628A som processor. Mellan dessa har jag en MAX232.

För att testa hur det funkar använder jag en lite modifierad variant utav exemplet som finns i MikroC. Det jag har lagt till är en blinkfunktion. Det blinkar en diod när den inte får någon data.

Nedan så ser ni den bilden som jag hittade i artikeln om den funktionen jag använder.
Bild

Sedan är koden här:

Kod: Markera allt

unsigned short i;

void main() {
  PORTA = 0;
  TRISA = 0;
  TRISB = 0b00000010; //Osäker på om detta behövs, det står inget i hjälpsektionen om det.

  // Initialize USART module (8 bit, 2400 baud rate, no parity bit..)
  Usart_Init(2400);


  do {
    if (Usart_Data_Ready()) {   // If data is received   - Detta verkar inte funka som det skall
      i = Usart_Read();         // Read the received data
      Usart_Write(i);           // Send data via USART
    } else {
      //Blinkfunktionen
      PORTA =  0b00000100;
      delay_ms(1000);
      PORTA = 0;
      delay_ms(1000);
    }
  } while (1);
}//~!

För att testa och skicka data har jag testat med hyperterminal, putty och den inbygda terminalen i kompilatorn.

Hoppas det finns någon vänlig och duktig själ som kan hjälpa mig med detta.

//Kalf
Användarvisningsbild
Kalf
Inlägg: 249
Blev medlem: 5 november 2005, 09:59:45

Inlägg av Kalf »

Jag glömde tillägga att jag använder den inbygda kristallen och jag har kopplat rx och tx till rätt pinnar på PIC'en.
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Kolla först om det kommer ut någon data ur PC:n. Börja med att bygla pinne 2 och 3 på serieporten. Det du skriver bör då eka tillbaks direkt i terminalprogrammet. Funkar?
Gör sedan samma sak på andra änden seriekabeln. Funkar?
Koppla sedan ihop pinne 9 och 10 på MAX-kretsen (lyft bort PIC:en först). Funkar?

Om det fungerar så långt så kan du börja fokusera på PIC:en och koden.
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Kalf skrev:Jag glömde tillägga att jag använder den inbygda kristallen ...
Bra, nu vet VI det.. men vet koden om att du bytt kristall (och kanske även frekvens)?! :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Jag glömde tillägga att jag använder den inbygda kristallen

Det finns ingen inbyggd "kristall" i någon modell av PIC!
Många har dock en inbyggd oscillator...

Notera att INTOSC i en 628A inte är speciellt noggran.
Har du kollat ordentligt så att du får en baud-rate som fungerar ?

> Usart_Init(2400);

Det där bygger på att MikroC vet vilken hastighet du tänker köra på.
Gör MikroC det ?

> Hoppas det finns någon vänlig och duktig själ som kan hjälpa mig med detta.

He he, du har ju inte ens talat om vad du har för problem ! :-)
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Seriekommunikation mikroC

Inlägg av bos »

Kalf skrev:Hoppas det finns någon vänlig och duktig själ som kan hjälpa mig med detta.
Med vad? Vad är problemet?
Användarvisningsbild
Kalf
Inlägg: 249
Blev medlem: 5 november 2005, 09:59:45

Inlägg av Kalf »

Jag gjorde som oJsan sa och först byglade serieporten, och det gick fint, fick svar med en gång. Sedan gjorde jag det på andra sidan kabeln med, och det gick finfint. Men det funkar inte på andra sidan MAX232'an. Jag har kontrollerat emot RS232'ans datablad. Det var en liten skillnad i hur kondensatorerna var kopplade, så jag ändrade på det. Förövrigt har jag en MAX232A, men ända skillnaden emot den vanliga 232'an är att min klarar högra hastigheter. Sedan är det andra värden på kondensatorerna, (0,1uF, istället för 1,0uF)

Jag har kontrolerat att kretsen inte är trasig, genom att koppla in en annan, oanvänd MAX232A.

I kompilatorn ställer jag in vilken klockfrekvens jag använder, så mina instruktioner borde fatta detta, Men det verkar ju inte som det är där felet ligger.

Någon som har någon idé om vad som kan vara fel?

//Kalf
Användarvisningsbild
Kalf
Inlägg: 249
Blev medlem: 5 november 2005, 09:59:45

Re: Seriekommunikation mikroC

Inlägg av Kalf »

bos skrev:
Kalf skrev:Hoppas det finns någon vänlig och duktig själ som kan hjälpa mig med detta.
Med vad? Vad är problemet?
Jag vill kunna skicka och taemot data via serieporten. Och det fungerar inte. Jag trodde problemet var självklart?

//Kalf
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Jag trodde problemet var självklart?

Nej, inte alls.
Du enbart beskrev hur du hade kopplat...

Hur som helst, kolla MAX232'an genom att enbart köra den separat och
läga RX/TX pinnarna hög/låg manuellt. Får du rätt nivåer på andra sidan ?
D.v.s i båda riktningarna.

> (0,1uF, istället för 1,0uF)

Du har ritat 10 uF...
Användarvisningsbild
Kalf
Inlägg: 249
Blev medlem: 5 november 2005, 09:59:45

Inlägg av Kalf »

>Du har ritat 10 uF...

Som jag skrev så tog jag bilden ifrån hjälpsektionen i min kompilator, där använder de en MAX232 istället för en MAX232A som jag gör. Skillnaden är hastigheten som kretsen klarar och värdet på kondenatorerna.

Hur menar du jag skulle testa, Bara köra 5v rätt igenom och se om jag får det på andra sidan med, Eller skulle jag köra med någon annan spänning in?

//Kalf
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Seriekommunikation mikroC

Inlägg av bos »

Kalf skrev:Jag vill kunna skicka och taemot data via serieporten. Och det fungerar inte. Jag trodde problemet var självklart?
Det blir så mycket enklare om vi slipper gissa oss fram till problemet, och att du inte behöver gissa om vi förstår problemet eller inte.

Jag förstod iallafall inte vad problemet var. Du visade hur du kopplat, och du visade kod. Du skrev inte vad som faktiskt hände, och *inte* hände, och vad du istället hade förväntat dig skulle hända.

Det framgår inte heller vad för terminalprogram du använt, hur du ställt in det, osv. Massor med information som saknas.
bos
Inlägg: 2311
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

Kalf skrev: där använder de en MAX232 istället för en MAX232A som jag gör.
I ditt urinlägg finns följande:
Mellan dessa har jag en MAX232.
Användarvisningsbild
Kalf
Inlägg: 249
Blev medlem: 5 november 2005, 09:59:45

Inlägg av Kalf »

>Det blir så mycket enklare om vi slipper gissa oss fram till problemet, och att du inte behöver gissa om vi förstår problemet eller inte.

Jag trodde faktiskt att jag förklarat det. Men iaf. Jag har ett program i uC'n som skall skicka tillbaka all data som den får. Detta för att få detta att fungera innan jag skriver den riktiga koden. Jag får inget tillbaka, det e problemet, och nu har jag kommit fram till att felet ligger i MAX232A kretsen.

>I ditt urinlägg finns följande:

Jag tänkte inte på att jag använde en 232A då jag skrev det. Kom på det senare då jag läste databladet igen.

//Kalf
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Se till att nivåomvandlaren är rätt kopplad och att kondensatorerna har rätt värden. Lägger du 5V på TX (ben 10) bör du ha en negativ spänning på ben 7. 0V på TX ska ge positiv spänning på ben 7. RX är lite knepigare att testa eftersom du måste ha negativ spänning, men den går att ta från en annan pinne på serieporten (minns inte vilken).

Om vi bara anmärker alla fel så kommer vi ju ingen vart?!
I första inlägget står det:
"If data is received - Detta verkar inte funka som det skall"
Jag förstod på en gång vad som var problemet.
Ibland får jag känslan av att vissa person inte vill förstå, eller hellre letar fel än att försöka förstå.

"Det framgår inte heller vad för terminalprogram du använt"
I första inlägget står det "hyperterminal, putty och den inbygda terminalen i kompilatorn."
Användarvisningsbild
Kalf
Inlägg: 249
Blev medlem: 5 november 2005, 09:59:45

Inlägg av Kalf »

Ja, nu så är det jag att jag är inte så himla hajj på detta med negativa spänningar osv. Men iaf, jag kopplade först TX till 5v och mätte med min multimeter med + sidan på ben 7 och minus på jord, då fick jag värdet: 4,2V

Tar jag sedan och mäter med TX till 0V med multimeterns plus på pin 7 och minus på 5V får jag värdet: -2,1V

Har jag bara mätt på fel sätt eller är det något som är fel?

//Kalf
Skriv svar