Avatar billede troublesmurf Praktikant
04. august 2007 - 11:55 Der er 6 kommentarer

embedded C på en ATMega48. RS232 kommunikation

Jeg sidder og forsøger at kommunikere med en ATMega48 microcontroller, og kan ikke få meget hjælp i dens tech. spec.

koden jeg har lavet, skal blot returnere samme karakter som jeg sender til den (i første omgang) men det er altid samme tegn den returnere: "Ç" chr(128) hvilket jo nok kunne tyde på jeg har en fejl i høj/lav register. Men jeg kan ikke hitte ud af det..
Avatar billede troublesmurf Praktikant
04. august 2007 - 11:56 #1
...og så sender jeg da også lige koden....

#define FOSC 8000000 //1843200
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1
#define RX_BUFSIZE 80

#include <stdio.h>
#include <avr/io.h>
void uart_init(void)
{
  UBRR0H = (unsigned char)(51>>8);
  UBRR0L = (unsigned char) 51;

  UCSR0B = (1<<RXEN0)|(1<<TXEN0);
  UCSR0C = (1<<USBS0)|(3<<UCSZ00);

}
int uart_putchar(uint8_t c)
{
  loop_until_bit_is_set(UCSR0A, UDRE0);
  UDR0 = c;

  return 0;
}

int
uart_getchar()
{
  uint8_t c;

    loop_until_bit_is_set(UCSR0A, RXC0);

    c = UDR0;


  return c;
}


int main()
{

  uart_init();

  for(;;)
    uart_putchar(uart_getchar());
   
}
Avatar billede intel4004 Novice
04. august 2007 - 16:02 #2
troublesmurf>

Nu vil det fra min side kræve en hel selvstudie i manualerne at hjælpe dig fuldstændig, men jeg studser lidt over linien med (51 >> 8). Hvad giver dette når man typecaster med unsigned char? For mig er det 51 divideret med 256, altså 0. Er dette meningen?

00110011 >> 8 = 00000000 ??

Mvh Intel4004
Avatar billede troublesmurf Praktikant
04. august 2007 - 22:40 #3
dette var blot et forsøg med min Baudrate, det er den manuelle udregning. Men det giver det samme uanset hvilken BRR jeg bruger.

Mit håb var at der var en som havde brugt samme mikrocontroller og kunne se hvor jeg har lavet en brøler, jeg er ret overbevist om at det blot er en fejl et eller andet sted i en register-definition.

Koden har jeg oprindelig lavet til en ATMega16, hvor det fungere upåklageligt. Men ATMega48 bruger andre registerdefs. og jeg har åbenbart ikke helt kunne finde ud af dens manual.
Avatar billede intel4004 Novice
04. august 2007 - 23:41 #4
Jeg har kun arbejdet med en TI MSP430 engang for 3 år siden. Men det jeg henviste til var din benyttelse af en left-shift af en værdi som er under 0xFF.

Jeg har faktisk taget et kig på en manual doc2545.pdf fra www.atmel.com, men det er som sagt 3 år siden jeg arbejdede med så low-level begreber. Jeg kan se at de kode eksempler du bruger også er at finde i afsnit 18.5 side 177....

Er master clock sat til 8MHz?

Beregningen giver også tæt på 52 ifølge min lommeregner.

Mvh Intel4004
Avatar billede troublesmurf Praktikant
05. august 2007 - 09:31 #5
Jeg bruger faktisk heller ikke den værdi "51" det var blot et forsøg. Normalvis bruger jeg den udregning jeg har lavet højere oppe MYUBRR

Jeg bruger den interne oscillator, som er på 8mhz, men den kan vist have en fejlmargin på 10%. Derfor jeg har forsøgt mig med manuelle udregninger

De kodeeksempler der er i manualen, kan ikke bruges direkte, men det er dem jeg har taget udgangspunkt i. Jeg er dog begyndt at tro at det nok er min interne oscillator der laver problemet, så jeg må vente til Farnell får leveret mine 8mhz krystaller, inden jeg kan debugge videre.

Men mange tak for responsen. Godt at se man ikke er den eneste i verden der interesserer sig for det helt basale.
Avatar billede troublesmurf Praktikant
11. august 2007 - 08:13 #6
Jeg fandt ud af at det var min timing der var problemet. Jeg satte en præcis krystal på, og gen-udregnede min baud-rate. og så virkede det igen.

Jeg lukker spørgsmålet igen...

-skulle andre have spørgsmål ang. ATMega mikrocontrollere, så er AVRFreaks.net et rigtig godt sted.

/Torben
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester