avr at90sub162 UART

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

meh, hitta felet................ jordkabeln i rs232 sladden var av............
böt ut den, nu kommer skräp fram iaf..dock blir det inget U utan ett skumt C med flerpar under/över.....

baudraten är satt till 9600 på både
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Inlägg av thepirateboy »

Använd Code-taggarna så man ser din kod lättare.

Vid start av MCU:n sätts alla register till noll. Du har t ex (vad jag kan se) inte definerat antal bitar. Kolla tabell 17.7 i databladet. Du behöver sätta bit 2 och 1 i register UCSR1C för att få 8 bitar.

Använd gärna ett bättre terminalprogram som t ex Bray Terminal när du försöka kommunicera så ska du se det ordnar sig.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

gripner skrev: böt ut den, nu kommer skräp fram iaf..dock blir det inget U utan ett skumt C med flerpar under/över.....

baudraten är satt till 9600 på både
Är du hundra säker på att verkligen lyckats sätta den till 9600 i mikrokontrollern? Det brukar vara lite räknande hit och dit med frekvenser och delningar för att få det rätt. Lätt att missa någonting. Även värt att kolla på det som Piratpojken skrev.
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

#define UBRRVAL ((F_CPU/(BAUDRATE*16UL))-1)

stämmer bra med databöadets formel

testade #define UBRRVAL 51

51 är vad jag får databladets formel till UBRR = freq / (16*9600) - 1

samma ffel dock
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

thepirate

enligt databladet UCSR1C = (3<<UCSZ10); för 8bitar
funkar lika illa för det dock

hänger dock ej riktigt med hur 3:an sätter bit 0 och 1, är det för:
0 = 1
1 = 2

summan bir 3

ville man sätta alla 3 till 1 skulle det bli 1+2+4=7 ?
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

nu fattar jag ingenting.

I databladet står det i tabel 17-11 att 51 är 9600baud vid 8MHz

jag har satt 51, jag har 8MHz kristall

testar att köra med 1200baud i pc:n och det funkar!!! borde ju funka på 9600 o inget annat!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Tja,
- Du har missuppfattat databladet, eller
- du har räknat ut värdet til baudratre registret fel, eller
- du kör inte på 8 Mhz, eller
- något annat, så klart.
*Något* är det i alla fall.... :-)
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

Frågan är vad,

uträkningen är rätt. dock använder jag inte den iom att databladet har en tabel som säger att tex 51 är 9600baud vid 8MHz

står klart märkt på min kristall att det e 8MHz.

databladet har oxå kod som sätter registret för baudrate, vilken jag använder.
dock är den lite fel tror jag

Kod: Markera allt

UBRRHn = (unsigned char)(baud>>8);
UBRRLn = (unsigned char)baud;

måste va 
UBRRnH = (unsigned char)(baud>>8);
UBRRnL = (unsigned char)baud;
för att komilera, nog en typo i databladet.
edit
http://www.olimex.com/dev/avr-usb-162.html
är dev kortet jag använder med 8MHz kristall
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Tja, du får verifiera alla olika delar separat.

> står klart märkt på min kristall att det e 8MHz.

Jag kan inte AVR, men räcker det för att vara 100% säker ?
Finns det inte inställningar för t.ex prescaler aller PLL'er ?
eqlazer
Inlägg: 923
Blev medlem: 22 september 2007, 13:53:45
Ort: Göteborg

Inlägg av eqlazer »

Har du ändrat fuses så att den använder externa kristallen istället för intern 1 MHz?
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

har i koden ändrat #define F_CPU 8000000 till 1000000 ist för att testa om det va som så att den körde på intern. men funka inge bättre

hur kollar jag den där fuses grejjen?
eqlazer
Inlägg: 923
Blev medlem: 22 september 2007, 13:53:45
Ort: Göteborg

Inlägg av eqlazer »

Fuses är ganska grundläggande att veta om när man pysslar med AVR. LFUSE, HFUSE och EFUSE bestämmer saker som vilken oscillator som används, BOD, bootarea, watchdog etc.

AVR-Studio? I dialogen där man programmerar AVR:en finns en flik med fuses.
avrdude? 'dump lfuse' läser LFUSE, 'write 0 0x12 lfuse' skriver 0x12 till LFUSE

Har du ingen makefile som definierar F_CPU?

Om du ändrar detta till 1000000 och F_CPU redan är definierad i makefilen så har inte din ändring någon effekt.

Kod: Markera allt

#ifndef F_CPU
#define F_CPU 8000000
#endif
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Inlägg av thepirateboy »

Det verkar rätt att 8 databitar sätts som default nu när jag simulerar i AVR-studio. För den skull finns det ingen anledning att inte sätta registret.

UCSR0C = (3<<UCSZ00); översätts till UCSR0C = 0x06; se listfilen som kompilatorn genererar för fler detaljer.

För att ändra fuses behöver du en programmerare, det går inte med FLIP.
Försök på något sätt verifiera vilken klockfrekvens den verkligen kör på.
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

jag är kass på asm, inte rört det sedan amiga 500 var het :)

skulle vilja skriva ett program som lopar igenom 10000000 simpla adderingar, tar det ca 10sec ere 1MHz, addering tar tydlingen likt de allra flesta instruktioner 1 klockcykel.

någon som vet hur många instruktioner:

for(i=1; i < 10000001; i++)

tar, dvs, hur många instruktioner behöver en for-loop?

jag får det till 3. addering, gämför, branch till start om mindre än.
4 första snurren iom att i=1; men ointresant vid 10000000 snurrar.

om nu inte avr:en saknar förmåga att compara etc mot minne, blir det en massa till dock, måste in med datan i register då ju..

tycker iaf att det är mycket skumt om dom har lödit på en 8MHz extern kristall o sen inte använder den..... men men, om så är fallet, finns det någon snäll själ som kan progga om mitt dev-kort? kanske i sthlm trakten?
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Inlägg av thepirateboy »

Antagligen används kristallen, men det finns klockdiv i AVR:n så den verkliga klockfrekvensen kan ju vara en annan. Du har lite att läsa på sid 25-29 samt kolla i koden.

Loopen

unsigned long i;
for(i=1; i < 10000001; i++)
;

genererar på en Atmega48

1b0: 01 96 adiw r24, 0x01 ; 1
1b2: a1 1d adc r26, r1
1b4: b1 1d adc r27, r1
1b6: 81 38 cpi r24, 0x81 ; 129
1b8: 26 e9 ldi r18, 0x96 ; 150
1ba: 92 07 cpc r25, r18
1bc: 28 e9 ldi r18, 0x98 ; 152
1be: a2 07 cpc r26, r18
1c0: 20 e0 ldi r18, 0x00 ; 0
1c2: b2 07 cpc r27, r18
1c4: a8 f3 brcs .-22 ; 0x1b0 <main+0x52>

Simulering i AVR-studio säger att ovanstående snutt tar
16250ms och 129999999 cykler vid 8 MHz
Skriv svar