AVR + MAX233

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Pibben
Inlägg: 25
Blev medlem: 10 februari 2005, 10:59:01

AVR + MAX233

Inlägg av Pibben »

Jag försöker få en AVR-krets att prata RS232 till min PC.

Kod: Markera allt

    ATmega168               MAX233A               DB9 (hane)
    .--------.       .------------------.         .-------.
    |  2 RXD +-------+ 3 R1OUT   4 R1IN +---------+ 2 RXD |
    |  3 TXD +-------+ 2 T1IN   5 T1OUT +---------+ 3 TXD |
    .        .    .--+ 12 V-  7   11 C+ +--.    .-+ 5 GND |
    .        .    '--+ 17 V-  V   15 C+ +--'    | '-------'
    |        |    .--+ 9 GND  c  16 C2- +--.   ---
    '--------'    +--+ 6 GND  c  10 C2- +--'    -
                  |  '--------+---------'
                 ---          |
                  -          5V
Mellan D-sub-kontakten och PC:n sitter en nollmodemkabel.

Programmet ser ut såhär:

Kod: Markera allt

#include <avr/io.h>

void USART_Init(unsigned int ubrr)
{
   /* Set baud rate */
   UBRR0H = (unsigned char)(ubrr>>8);
   UBRR0L = (unsigned char)ubrr;

   /* Enable the transmitter */
   UCSR0B = (1<<TXEN0);
}


void USART_Transmit(unsigned char data)
{
   /* Wait for empty transmit buffer */
   while( !(UCSR0A & (1<<UDRE0)));

   /* Put data into buffer, send the data */
   UDR0 = data;
}


int main(void) {

   USART_Init(25); /* 19k2 @ 8MHz */

   for(;;) {
      USART_Transmit('a');
      USART_Transmit('\r');
      USART_Transmit('\n');
   }
}
Med PC:ns terminalprogram inställt i 19k2/8N1 så syns där inte ett knyst. Gör jag nåt uppenbart fel?

När jag kör igång terminalprogrammet (TuTTy) så står det i titelraden "COM1 - TuTTy". När jag slår på AVR:en (& co) byter det till " - TuTTy (Disconnected)", så nånting verkar komma fram iaf.
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Det första jag ser är att du har satt Rxd till Rxd vilket är fel (vad jag vet), Rxd skall kopplas till Txd, detta för att när tex datorn skickar skall mikrkontrollern temot och viceversa.

EDIT: Alltså : Txd -> T1IN ; Rxd -> T1OUT och "likadant" mellan max232 och datorporten.

EDIT2: se tex http://chaokhun.kmitl.ac.th/~kswichit/MAX232/MAX232.htm
Pibben
Inlägg: 25
Blev medlem: 10 februari 2005, 10:59:01

Inlägg av Pibben »

Men TXD/RXD i seriekontakten motsvara alltså AVR:ens TXD/RXD inte PC:ns. RXD/TXD korsas väl sen i nollmodemkabeln?
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Inlägg av thepirateboy »

Jag har provat koden och den fungerar, kör med TestTerm. Men ska du inte ställa in UCSR0C också?

EDIT: Kanske inte finns UCSR0C på 168?
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Pibben skrev:Men TXD/RXD i seriekontakten motsvara alltså AVR:ens TXD/RXD inte PC:ns. RXD/TXD korsas väl sen i nollmodemkabeln?
Ahh, nollmodemskabel... ursäkta det missaade jag.

EDIT: tog bort lit fel....

EDIT2: Har du satt avrens fusebits till 8MHz? annars går den väl på 1 Mhz default?
Pibben
Inlägg: 25
Blev medlem: 10 februari 2005, 10:59:01

Inlägg av Pibben »

thepirateboy skrev:Jag har provat koden och den fungerar, kör med TestTerm. Men ska du inte ställa in UCSR0C också?
Hur har du testkört? Har du samma krets(ar) som jag?

UCRS0C är per default inställt på 8N1, och det borde funka tycker jag.

EDIT: Vad är TestTerm, förresten?
Senast redigerad av Pibben 25 maj 2006, 16:56:23, redigerad totalt 1 gång.
Pibben
Inlägg: 25
Blev medlem: 10 februari 2005, 10:59:01

Inlägg av Pibben »

björn skrev: EDIT2: Har du satt avrens fusebits till 8MHz? annars går den väl på 1 Mhz default?
Om jag fattat databladet rätt går m168:an i 8MHz per default.
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Nej, kolla punkt 7.2.1 på sidan 26.
The device is shipped with Internal oscillator at 8.0 mhz and with the fuse CKDIV8 programmed, resulting in 1.0 MHz system clock.
Senast redigerad av björn 25 maj 2006, 17:04:35, redigerad totalt 1 gång.
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Inlägg av thepirateboy »

Jag kör med Atmega 128 och en seriell till USB-krets istället för MAXxxx så den fysiska kopplingen är inte lika, dock verkar koden funka. TestTerm var ett terminalprogram jag hittade på nätet.
http://www.swcab.nu/Projbank1.html
Pibben
Inlägg: 25
Blev medlem: 10 februari 2005, 10:59:01

Inlägg av Pibben »

Du har rätt björn, den går i 1MHz.

Nu försökte jag programmera CKDIV8-säkringen till en 1:a med kommandot "avrdude -v -p m168 -c dapa -e -U lfuse:w:0xe2:m" men nu svarar inte kretsen längre :( Vad gjorde jag fel?
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Ajajaj, det skull jag ha varnat dig för, jag använder inte själv avrdude så jag vet inte vad du gjorde fel men om fusebitarna blir felställda så att kretsen gå på extern kristall svarar den inte på programmeringen utan att man sätter en extern kristall (eller någon annan typ av ocsillator).

EDIT: Vad programmerar du med för programmerare? Har du någon kristall du kan koppla till kretsen?
Pibben
Inlägg: 25
Blev medlem: 10 februari 2005, 10:59:01

Inlägg av Pibben »

Det verkar som kretsen blev rätt programmerad, men att programmerarn inte gillar att den kör i 8MHz. Programmeraren jag har är den som beskrivs på http://www.linuxfocus.org/English/Novem ... 52lfindex8
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jag har inte använt AVR, men jag förvånas alltid av att det spelar
roll hur den var konfiggad *förra* gången när man ska programmera
om den på nytt. Borde det inte alltid vara möjligt att programmera
om den helt från början ??
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

JOvisst, det är det med.... men inte med en enkel ICSP.
Skriv svar