Min C kod fungerar inte (AVR)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
atmelfan
Inlägg: 255
Blev medlem: 5 maj 2010, 17:59:36
Ort: iggesund

Min C kod fungerar inte (AVR)

Inlägg av atmelfan »

Hej
jag har köpt ett av thepirateboys AT90usb162 usb kort för att lära mig C istället för bascom AVR.
Jag har gjort denna lilla bit kod som borde få den röda lysdioden att blinka med 0,5HZ
men jag får inga felmeddelanden i avrstudio men ändå fungerar det inte, kan någon se vad jag gör fel?
Klockan på kortet är 8Mhz.
Lysdioden är aktiv låg.
Programmering och verifikation går bra.
Är ganska trött just nu så säg till om jag har glömt någon information.

Kod: Markera allt

#define F_CPU 800000UL //Definera klockfrekvens på 8Mhz
#include <inttypes.h>
#include <avr/io.h>
#include <util/delay.h>


int main (void) 
{ 
DDRC = 0xff; //Sätter portb till utgång
//DDRA = 0xfe; //Sätter porta till ingång	
while(1)//Starta loop 
{ 
PORTc=0xff; //Portc låg
_delay_ms(2000); //Vänta 2sek 
PORTD=0xfe; //Portc hög
_delay_ms(2000); //Vänta 2sek
} 
return 1; //Gå tillbaka till while
}
Tack på förhand.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av atmelfan 29 oktober 2010, 07:33:06, redigerad totalt 3 gånger.
Johanb
Inlägg: 3406
Blev medlem: 26 mars 2006, 22:26:12
Ort: Smedjebacken

Re: Min C kod fungerar inte (AVR)

Inlägg av Johanb »

TIll att börja med så har du definierat F_CPU till 800khz, kanske inte vad du vill ha :)
Användarvisningsbild
atmelfan
Inlägg: 255
Blev medlem: 5 maj 2010, 17:59:36
Ort: iggesund

Re: Min C kod fungerar inte (AVR)

Inlägg av atmelfan »

Har ändrat dock så blinkar lysdioden lika lite som förut :( . Prövade också att ändra till 1Mhz ifall divide by 8 säkringen är programmerad, ingen skillnad :( .
Nä, nu ska jag gå o lägga mig.
Förhoppningsvis fungerar hjärnan lite bättre imorgon.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Min C kod fungerar inte (AVR)

Inlägg av johano »

Jag tycker det på schemat ser ut som om lysdioden är kopplad till PD6, alltså inte på PORTC?

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

Re: Min C kod fungerar inte (AVR)

Inlägg av sodjan »

> men ändå fungerar det inte,

Vad betyder "funegrar inte" mer exakt ?
Vad händer ? Lyser lysdioden alls ?

> DDRC = 0xff; //Sätter portb till utgång

Om du för övrigt jobbar lika slarvigt som du skriver
kommenterar, så har du en del att göra...

> PORTC=0xff; //Portc låg
> PORTC=0xfe; //Portc hög

Båda dom kommenterarna kan inte vara rätt.
Det är bara en bit som skiljer mellan kommandona.

> _delay_ms(2000); //Vänta 2sek

Har du läst på om _delay_ms() ordentligt så att du förstår
inom vilka marginaler parametern kan vara ? Dessutom är den ju
helt beroende på att F_CPU är korrekt. JohanB antyder att de inte
är det, jag kan inte avgöra det (det ser rätt ut, är det ändrat efter
JohanB's inlägg ? Ja, det har du tydligen...)

Om jag tolkar dokumentationen för _delay_ms() korrekt så ger
_delay_ms(2000) en delay på 0.2 s. Ger ett snabbt blink...
Användarvisningsbild
atmelfan
Inlägg: 255
Blev medlem: 5 maj 2010, 17:59:36
Ort: iggesund

Re: Min C kod fungerar inte (AVR)

Inlägg av atmelfan »

Nu fungerar det :whoho: .
Skyller på att jag är trött :oops: :doh: .
Tack för hjälpen.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Min C kod fungerar inte (AVR)

Inlägg av sodjan »

> Skyller på att jag är trött.

Det kan väl inte *bara* ha varit det ?
Vr det inget fel varken i uppkopplingen eller koden ??
Användarvisningsbild
atmelfan
Inlägg: 255
Blev medlem: 5 maj 2010, 17:59:36
Ort: iggesund

Re: Min C kod fungerar inte (AVR)

Inlägg av atmelfan »

Vad betyder "fungerar inte" mer exakt ?
Vad händer ? Lyser lysdioden alls ?
Den lyste inte alls.
Om du för övrigt jobbar lika slarvigt som du skriver
kommenterar, så har du en del att göra...
Den gör väl portd till utgång?
Har du läst på om _delay_ms() ordentligt så att du förstår
inom vilka marginaler parametern kan vara ? Dessutom är den ju
helt beroende på att F_CPU är korrekt.
Är bortskämd med bascom där man knappt behöver tänka på sånt.
F_CPU vet jag inte om divide by 8 är aktiverad(ska kolla i databladet imorgon om den är på av default) annars
är den 8Mhz
Det kan väl inte *bara* ha varit det ?
Var det inget fel varken i uppkopplingen eller koden ??
Jag skyllde på det men det var jag som inte kollade igenom min kod och hårdvara nog. Och märkte varken mitt fel med Portd och att jag definerat F_CPU som 800khz istället för 8Mhz.

Tycker själv att jag var för snabb med att ställa frågan här istället för att vänta tills imorgon när man är utvilad och fokuserad.
Senast redigerad av atmelfan 29 mars 2011, 17:07:54, redigerad totalt 1 gång.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Min C kod fungerar inte (AVR)

Inlägg av jesse »

VAD HAR DU ÄNDRAT PÅ DÅ?
i din kod ändrar du ju bit 0 i port D.
Men lysdioden sitter på bit 6 på port C.
Så det vore konstigt om den plötsligt började blinka.

_delay_ms(2000) brukar ge en fördröjning på 2 sekunder, inte 0.2 sekunder.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Min C kod fungerar inte (AVR)

Inlägg av johano »

Jag tycker det blir lite tokigt att redigera(rätta ursprungsfrågan + koden i första inlägget, det gör att tråden blir helt obegriplig för andra som råkar ramla på den i framtiden..

Bara mina 2 ören,
/johan
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Min C kod fungerar inte (AVR)

Inlägg av sodjan »

>>> DDRC = 0xff; //Sätter portb till utgång
>> Om du för övrigt jobbar lika slarvigt som du skriver
>> kommenterar, så har du en del att göra...
> Den gör väl portd till utgång?

Vad 17 har Port *D* med ovanstående att göra ??

> _delay_ms(2000) brukar ge en fördröjning på 2 sekunder, inte 0.2 sekunder.

Det jag har hittat om _delay_ms() är att om man överskrider maxvärdet
för parametern så kommer den att börja räkna parametern som 1/10 ms.
Alltså 0.2 sek med 2000 som parameter.
The maximal possible delay is 262.14 ms / F_CPU in MHz.

When the user request delay which exceed the maximum possible one, _delay_ms() provides
a decreased resolution functionality. In this mode _delay_ms() will work with a resolution of
1/10 ms, providing delays up to 6.5535 seconds (independent from CPU frequency).
The user will not be informed about decreased resolution.
Men det kanske är en annan _delay_ms() som jag har hittat...

Å andra sidan så lär det inte hjälpa om lysdioden sitter på fel pinne i alla fall...
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Min C kod fungerar inte (AVR)

Inlägg av jesse »

Märkligt... jag har kört _delay_ms(2000); och fått paus på precis 2 sekunder. Men jag fattar inte uttrycket:
The maximal possible delay is 262.14 ms / F_CPU in MHz.

så vid 8 MHz slulle maxtiden vara 262.14/8 = 32.77 ms? Låter väldigt lite. :humm:
Johanb
Inlägg: 3406
Blev medlem: 26 mars 2006, 22:26:12
Ort: Smedjebacken

Re: Min C kod fungerar inte (AVR)

Inlägg av Johanb »

Om ni läser nogrannare i sodjans citat så ser ni att det är "resolution" som minskas till 1/10ms om man överskrider den "magiska" gränsen, alltså nogrannheten i fördröjningen.
Användarvisningsbild
atmelfan
Inlägg: 255
Blev medlem: 5 maj 2010, 17:59:36
Ort: iggesund

Re: Min C kod fungerar inte (AVR)

Inlägg av atmelfan »

Kod: Markera allt

#define F_CPU 8000000UL
#include <inttypes.h>
#include <avr/io.h>
#include <util/delay.h>


int main (void) 
{ 
DDRD = 0xff; //sätter portd till utgång
//DDRA = 0xfe; //sätter porta till ingång	
while(1)//starta loop 
{ 
PORTD=0xff; //portd låg
_delay_ms(20000); //vänta 2sek 
PORTD=0xfe; //portd hög
_delay_ms(20000); //vänta 2sek
} 
return 1; //gå tillbaka till while
}
Vad 17 har Port *D* med ovanstående att göra ??
För att jag har ändrat till portd.
Men lysdioden sitter på bit 6 på port C.
Så det vore konstigt om den plötsligt började blinka.
Koden är den ovanför och så blinkar lysdioden fast med ungefär 5hz.
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Re: Min C kod fungerar inte (AVR)

Inlägg av thepirateboy »

Det verkar som schemat är suddigt och PortC kan misstolkas som PortD. Dessutom är PortD felmärkt på bilden i manualen. Jag ska ta och uppdatera dokumentet ikväll så det stämmer.

"Manualen" nu uppdaterad i säljtråden.
Senast redigerad av thepirateboy 29 oktober 2010, 17:44:27, redigerad totalt 1 gång.
Skriv svar