Nybörjarfrågor Atmega168 och GPS-modul

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Glattnos
Inlägg: 3105
Blev medlem: 29 oktober 2009, 20:01:18

Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av Glattnos »

Hej

Jag är nybörjare på microprosessorer och har några frågor. Jag har sökt i forumet men inte hittat vad jag söker. Har en bok i ämnet som jag inte heller hittar svar i, även om det säkert finns. Jag kan ju nämna att jag inte har någon som hellst utbildning utan har bara börjat lekt på hobbynivå.

Detta är vad jag har:
Atmega168 – Atmel enchipsdator
MAX202 – RS232 Tranciver
EM-411 – GlobalSat GPS-modul
AVR Dragon och AVR Studio och AVR-GCC kompilator

Detta kan jag:
Skriva enkla koder i C – Kan blinka dioder, rinnande ljus och liknande men knappt något mer
Programmera Atmega168:an med Dragonen via Parallel Programming
Koppla GPS-modulen(den skickar TTL)via MAX202-kretsen till datorns serieport och få GPS-kordinaterna utskrivna i terminalprogrammet, det ser ut såhär typ såhär och går lätt att tyda med hjälp av GPS-databladet:

$GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,,,,0000*18
$GPGLL,3723.2475,N,12158.3416,W,161229.487,A*2C
$GPGSA,A,3,07,02,26,27,09,04,15,,,,,,1.8,1.0,1.5*33

Nu till mina frågor:
1. När jag PP-programerar AVR-kretsen via dragonen så fungerar det bara med fuses på int. RC Osc. 128KHz och inte på 8MHz. Hur gör jag för att det ska gå?

2. Hur ska jag koppla om jag vill få in GPS-kordinaterna i AVR:en? Kan man skippa MAX202 då och helt enkelt koppla Rx-Tx och Tx-Rx?

3. Hur ska jag utforma koden för att kunna ta emot textsträngarna från GPS-modulen? Det finns exempelkod för USART i Atmega168-databladet men när jag kompilerar så blir det ju massor med error på namnen tex. UBRR0H, UCSR0B, UDR mm. Vilka #include-filer måste jag ha med? Finns det färdiga filer i kompilatorn?

4. När väl textsträngarna från GPS-modulen är mottagna av AVR:en, har någon nått förslag på C-kod för att sortera ut det väsentliga i strängarna och lagra i olika variabler eller liknande?

Jag skulle som nästa steg vilja få till det så att en diod tänds vid en specifik höjd, det känns som ett lagomt projekt i detta läge. Skulle vara ytterst tacksam om jag kunde få hjälp med detta och hoppas att ni talar om ifall jag har missuppfattat något.

Tack på förhand!
//Martin
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Re: Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av thepirateboy »

1. Verkar märkligt. Varför PP-programmerar du, ISP är ju betydligt smidigare.

2. Jo det ska gå om de båda matas med samma spänning.

3. Databladet brukar ha generella namn på registren, kolla i databladet vad de exakta namnen heter för just din processor.

4. Känner inte till GPS-formatet men det kanske finns nåt stopp och starttecken man kan leta efter för att kolla att man tagit emot ett giltigt paket.
Användarvisningsbild
RDX*
EF Sponsor
Inlägg: 1652
Blev medlem: 28 maj 2003, 22:52:04
Ort: Skåne - Lund

Re: Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av RDX* »

1. Vanligt viss så kan man högst programmera i en hastighet på 1/4 av systemklockan, dvs en oprogrammerad krets med defult klocka på 1MHz klarar max att programmeras i en hastighet på 0,25MHz.

2. EM-411 använder vanliga TTL nivåer, så det borde inte vara något problem med att koppla AVR:en direkt till EM-411.

3. Det finns inga färdiga filer i kompilatorn, det finns dock lite standard filer titta i \\WinAVR\avr\include\avr och på exempelfiler på internet. Att tyda text stängar brukar kallas "parsing", du kanske kan hitta någon exempelkod mha det.
Elias
Inlägg: 48
Blev medlem: 20 januari 2007, 09:45:52
Ort: Alingsås

Re: Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av Elias »

4. NMEA heter gps formatet. Antalet komma(,) tecken är alltid samma i en viss sträng, så vet du hur många kommatecken du skall in i strängen för att hitta datan du söker så är det bara att räkna dom.
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av E85 »

Jag brukar koppla GPS TX -> AVR RX och AVR TX -> PC RX eftersom man inte behöver skicka data till GPS:en. Iallafall inte till den jag har. Då kan man ändå skicka debug-info till PC-terminalen.

Jag skrev en GPS-logger som ett av mina första AVR-projekt så det finns en del småfel men du kan ju alltid skumma igenom koden och se om du hittar nåt användbart: avr-gps-logger.rar
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av jesse »

1. När jag PP-programerar AVR-kretsen via dragonen så fungerar det bara med fuses på int. RC Osc. 128KHz och inte på 8MHz. Hur gör jag för att det ska gå?
Jag antar att den interna oscillatorn går på 8 MHz men att frekvensen delas med 8 så F_CPU blir 1 MHz. Vill du ha F_CPU = 8 MHz så behöver du inte programmera några fuses. Det räcker att ändra i CLKPR (eller motsvarande register). Ändringen måste göras två gånger direkt efter varandra , annars påverkas den inte (säkerhetsåtgärd).
2. Hur ska jag koppla om jag vill få in GPS-kordinaterna i AVR:en? Kan man skippa MAX202 då och helt enkelt koppla Rx-Tx och Tx-Rx?
Japp, ingen max202 behövs.
3. Hur ska jag utforma koden för att kunna ta emot textsträngarna från GPS-modulen? Det finns exempelkod för USART i Atmega168-databladet men när jag kompilerar så blir det ju massor med error på namnen tex. UBRR0H, UCSR0B, UDR mm. Vilka #include-filer måste jag ha med? Finns det färdiga filer i kompilatorn?
Databladen är ofta felaktiga när det gäller dessa namn. Du får leta i slutet av kapitlet om USART och kolla register descriptions. Där står exakt vad de ska heta.
4. När väl textsträngarna från GPS-modulen är mottagna av AVR:en, har någon nått förslag på C-kod för att sortera ut det väsentliga i strängarna och lagra i olika variabler eller liknande?
Nu kan inte jag hur dessa data ser ut (jo, jag ser dina exempel, men just nu orkar jag inte sätta mig in i det)... Gör en struct som omfattar de data du vill ha ut. Hur du separerar och läser av datan från strängen däremot är jag inte så bra på.
Jag skulle som nästa steg vilja få till det så att en diod tänds vid en specifik höjd, det känns som ett lagomt projekt i detta läge. Skulle vara ytterst tacksam om jag kunde få hjälp med detta och hoppas att ni talar om ifall jag har missuppfattat något.
tja, du har väl siffran nånstans i din struct (se förra frågan). Så då kollar du varje gång du fått in ny data och omvandlat den om värdet är över ditt gränsvärde.
Tack på förhand!
//Martin
Tack själv.
Glattnos
Inlägg: 3105
Blev medlem: 29 oktober 2009, 20:01:18

Re: Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av Glattnos »

Tack för alla svar! Jag har nog lite för lite erfarenhet än så länge för att förstå alla förklaringar, men en del har klarnat.

1. Jag har försökt programmera via ISP men inte lyckats. PP fungerade bra efter lite testande. Men det här med klockfrekvensen? Om jag har en kod som blinkar en LED, ska inte den blinka olika fort beroende på vilken frekvens jag programmerar med? Är Frequency: som man ställer in i AVR Studio bara hastigheten man programmerar med? Hur ställer man prosessorns hastighet? Via CLKPR? Hur i så fall? Jag har testat allt möjligt utan att det blir någon skillnad.

2. Tack! Ingen MAX202 alltså!

3. Tack jesse som ledde in mig på rätt spår, namnen i exempelkoden stämmde inte riktigt med registernamen.

4. Detta kommer nog kräva att jag läser lite mer om ämnet.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av sodjan »

> Jag har försökt programmera via ISP men inte lyckats.

Varför inte ? Vad hände (eller hände inte) ? Felmeddelanden ?

> Hur ställer man prosessorns hastighet? Via CLKPR? Hur i så fall?

Vilken frekvens själva processorn ska köra med ska på något sätt
ställas in i processorn, ja. Det brukar vara en kombination av
"fuses" för att välja typ av osccillator intern/extern o.s.v) samt något
register där man t.ex kan välja hastighet på den interna oscillatorn.
Dessa delar brukar databladen vara väldigt tydliga på eftersom det är en
väldigt central del av det hela.

Sen så har många utvecklingsmiljöer också en inställning där man talar om
vilken hastighet man har för avsikt att köra processorn på så att verktyget
(kompilatorn o.s.v) kan t.ex generera delay() rutiner korrekt. Men det är
en ite annan sak, så att säga, och har inte direkt med vilken hastighet som
man sedan faktiskt kör på, det styrs av annat.

> Jag har testat allt möjligt utan att det blir någon skillnad.

Lite onödig information eftersom vi inte vet vad "allt möjligt" är...

> 4. Detta kommer nog kräva att jag läser lite mer om ämnet.

Det gäller nog inte bara punkt 4... :-)
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av E85 »

4. Detta kommer nog kräva att jag läser lite mer om ämnet.
Du kan väl börja med att läsa koden jag länkade till. I den tar jag ut ifall gps:en har fixerat position och skriver till en struct. Det är bara att fylla på structen med resten av variablerna i GPGGA-strängen och utöka koden för att plocka ut dom andra också (där jag kollar om arg==6 m.m.).
Glattnos
Inlägg: 3105
Blev medlem: 29 oktober 2009, 20:01:18

Re: Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av Glattnos »

1. Det var ett tag sedan jag försökte programmera via ISP nu, fick det ju inte att fungera och PP fungerade på en gång. Men jag provade ISP igen nu för att se vad som hände och(detta är AVR Studio)under fliken Bord det går att ändra ISP Freq. och trycka Write. Då verkar det fungera och det står:
Getting revisions... OK!
Reading target voltage .. OK!
Getting ISP frequency parameters.. SD=0xa3 .. OK

Under fliken Fuses kan man klicka på Read, betyder väll att man läser fuses som är programmerade i processorn? Hur som hellst så fungerar det, men bara om ISP Freq. är 51.10Hz:
Setting device parameters.. OK!
Entering programming mode.. OK!
Reading fuses .. 0xF9, 0xDF, 0xE3 .. OK!
Leaving programming mode.. OK!

Om jag väljer någon annan ISP Freq. under fliken Bord, klickar på Write och sedan väljer fliken Fuses så blir det:
Setting device parameters.. OK!
Entering programming mode.. FAILED!
Leaving programming mode.. OK!

Oavsett vilken ISP Freq. jag väljer så kan jag varken ändra fuses eller programera processorn, då blir det:
Reading FLASH input file.. OK
Setting device parameters.. OK!
Entering programming mode.. FAILED!
Leaving programming mode.. FAILED!
Och kommer upp en ruta där det står att jag ska kolla så att jag inte har för hög ISP freqvens eller har kopplat några kablar fel. Efter det måste jag starta om Dragonen för att det ska gå att göra något alls mer med den. Kablarna har jag gått igenom flera gånger och ISP Freq. är ju den lägsta. Jag har även 1 st Atmega168-20PU och 1st Atmega168-20PI som jag testar med.

2. När jag programmerar via PP så går det hur bra som hellst med båda processorerna, klickar jag på Read under fliken Fuses så får jag dessa:
Boot flash 1024 words
SPI enabled
Brown out disabled
Int. RC Osc. 128kHz
CKSEL = 0011
SUT = 10

Jag skulle vilja ha Int. RC Osc. 8 MHz men när jag ändrar Fuses och trycker på Verify under fliken Fuses så blir det:
Setting device parameters.. OK!
Entering programming mode.. OK!
Reading fuses .. 0xF9, 0xDF, 0xE3 .. OK!
WARNING: Fuse bits verification.. FAILED
Leaving programming mode.. OK!

Jag har testat en kod som ser ut såhär:

Kod: Markera allt

#include <avr/io.h>


int main (void)
{
	CLKPR = 0x02;
	int i = 0;
	DDRC = 0xff;
	PORTC = 0x00;

	while(1)
	{
		PORTC = 0b00000000;
		for(i=0; i < 3000; i++);
		PORTC = 0b00000001;
		for(i=0; i < 3000; i++);
	}
	return 0;
}
Jag har testat både med och utan CLKPR = 0x02 men lampan blinkar lika fort endå. Jag har även testat med en delay funktion men det blir ingen skillnad på hastigheten. Jag har läst om detta i databladet och där står det att CLKPR = 0x02 innebär att Internal RC Oscillator ska vara 8 MHz som default. CLKPR = 0x03 ska betyda 128 kHz Internal Oscillator. Vad gör jag för fel?
Jag har boken "Embedded C Programming and the Atmel AVR", där står mycket men jag hittar inget om den Interna Oscillatorn, inte säkert att boken behandlar det.

4. E85: Ja, jag har läst den och går igenom den del för del. Jag börjar förstå hur det fungerar, det var mycket bra att få den koden. Tackar!
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av sodjan »

> Jag skulle vilja ha Int. RC Osc. 8 MHz men när jag ändrar Fuses...

Ändrar fuses *var* ??
I utvecklingsmiljön ? Utan att ändra i (programmera om) processorn ?

> ...och trycker på Verify under fliken Fuses så blir det:
> WARNING: Fuse bits verification.. FAILED

Ja, det verkar ju naturligt. Det stämmer ju inte överens längre...
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av E85 »

Det verkar som du har lyckats ställa om till 128kHz oscillator så därför kan du inte programmera speciellt fort heller. Fuses ska vara inställda på "Calibrated Internal RC Oscillator" och CKDIV8 ska inte vara ikryssad så bör du få 8MHz.
Du har nog blandat ihop CKSEL (som ligger i fuses) med CLKPR (som bara är prescaler och ska vara 0x00 för högsta hastighet).
Glattnos
Inlägg: 3105
Blev medlem: 29 oktober 2009, 20:01:18

Re: Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av Glattnos »

Åh, nu fungerar det! Mitt fel hela tiden!

sodjan: Tack för att du styrde mig rätt, naturligtvis ska man inte trycka på Verify utan Program när man har ändrat Fuses(ja, i AVR Studio så bockar man ju i vika fuses som ska användas). När jag trycker på Program istället så fungerar det ju perfekt. Jag har hållit på med detta i flera veckor utan att lyckas, det är nästan idiotvarning. Säkert något liknande handhavandefel med ISP för det får jag ändå inte att fungera.

E85: Mycket riktigt, jag har blandat ihop CKSEL med CLKPR. Följdfråga: Hur programmerar man Fuses(tex. CKSEL) i själva koden? Går det, eller måste de ställas in i utvecklingsmiljön?
Gimbal
Inlägg: 8663
Blev medlem: 20 april 2005, 15:43:53

Re: Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av Gimbal »

Mitt tips är att sluta fippla med fuses, kan inte se att du behöver ändra dem för att koppla in en GPS. Eller vad försöker du göra?
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Nybörjarfrågor Atmega168 och GPS-modul

Inlägg av jesse »

Jo, fuses är något jag är försiktiog med att ändra om det inte är nödvändigt. Om jag t.ex. vill ändra klockfrekvens från 1 till 8 MHz så gör jag det i mjukvara och inte med fuse. Ett enda fel och klockan stannar - och då går processorn inte att programmera mer (inte seriellt i alla fall).
Skriv svar