Hjälp med kod!
Re: Hjälp med kod!
nodanolo:
Jojo det förstår jag men vad för argument ska placeras där? Varje gång jag placerar något i read_convert() parentesen får jag bara ett felmeddelande (spelar ingen roll vad jag placerar i parentesen).
Samtidigt får jag även varningen 'main is normally a non-static function'. Vad beror detta på?
Jojo det förstår jag men vad för argument ska placeras där? Varje gång jag placerar något i read_convert() parentesen får jag bara ett felmeddelande (spelar ingen roll vad jag placerar i parentesen).
Samtidigt får jag även varningen 'main is normally a non-static function'. Vad beror detta på?
Re: Hjälp med kod!
Argumentet väljer vilken analog kanal som ska användas.
unsigned int read_convert(unsigned char ch)
{
ADMUX = (ADMUX & ~15) | ch;//Väljer ADCx kanal
Du har skrivit
int main(void) - men du har ingen return(nånting) i slutet på main.
Deklarera hellre main som:
void main(void)
unsigned int read_convert(unsigned char ch)
{
ADMUX = (ADMUX & ~15) | ch;//Väljer ADCx kanal
Du har skrivit
int main(void) - men du har ingen return(nånting) i slutet på main.
Deklarera hellre main som:
void main(void)
Re: Hjälp med kod!
> Jojo det förstår jag men vad för argument ska placeras där?
Har du ens kollat vad read_convert använder parametern till?
Du har ju svaret i ditt eget program:
> DMUX = (ADMUX & ~15) | ch;//Väljer ADCx kanal
> Varje gång jag placerar något i read_convert() parentesen får jag bara
> ett felmeddelande (spelar ingen roll vad jag placerar i parentesen).
Om du varken anger vad du har försökt med eller vilket fel du fick,
så behöver vi knappt veta alls att du har försökt...
> Samtidigt får jag även varningen 'main is normally a non-static function'. Vad beror detta på?
Det beror på att main() i en mikrokontroller aldrig avslutas och då behöver
den inte ha någon datatyp. Prova med "void main()" istället.
Har du ens kollat vad read_convert använder parametern till?
Du har ju svaret i ditt eget program:
> DMUX = (ADMUX & ~15) | ch;//Väljer ADCx kanal
> Varje gång jag placerar något i read_convert() parentesen får jag bara
> ett felmeddelande (spelar ingen roll vad jag placerar i parentesen).
Om du varken anger vad du har försökt med eller vilket fel du fick,
så behöver vi knappt veta alls att du har försökt...

> Samtidigt får jag även varningen 'main is normally a non-static function'. Vad beror detta på?
Det beror på att main() i en mikrokontroller aldrig avslutas och då behöver
den inte ha någon datatyp. Prova med "void main()" istället.
Re: Hjälp med kod!
Det beror på att du inte avslutat föregående funktion read_convert (det saknas en avslutande }), så kompilatorn tror att det är main en lokal funktion i read_convert (man kan inte ha lokala funktioner i standard C, men gcc stödjer det).Excl skrev:Samtidigt får jag även varningen 'main is normally a non-static function'. Vad beror detta på?
Re: Hjälp med kod!
Hm, borde man inte få något om "unbalanced {}" eller liknande?
Eller är det syntaxtiskt OK att inte ha lika många { som } ?
Eller är det syntaxtiskt OK att inte ha lika många { som } ?
Re: Hjälp med kod!
Det kommer senare, sista felmeddelandet blirviket antyder att det t.ex fattas en '}' där. Den skulle egentligen vara tidigare, men eftersom man kan ha lokala funktioner i gcc så blir det fel först här.
Kod: Markera allt
main.c:57: error: expected declaration or statement at end of input
Re: Hjälp med kod!
Jaha, men borde inte även Excl ha fått det felet !?
Det stog inte ett skit om det...
Det stog inte ett skit om det...
Re: Hjälp med kod!
Så som C fungerar är det inte alltid som kompilatorn kan avgöra om man har glömt att avsluta något på rätt sätt eller om man har råka inleda något annat på fel sätt.
Re: Hjälp med kod!
Jo han borde ha fått det felet (och fick det förmodligen), det andra är ju dessutom "bara" en varning som med default inställningar inte ens syns.
Re: Hjälp med kod!
Med "expected declaration or statement" får man väl inte ens någon objekt fil (?).
Vilket inte heller påstogs, men i alla fall...
Vilket inte heller påstogs, men i alla fall...

Re: Hjälp med kod!
Excl skrev bara första felet, sedan första varningen i ett senare inlägg. Om jag tar sista programmet på förra sidan, i detta inlägg, och försöker kompilera får jag följandeså någon objektfil har inte genererats.
Om jag lägger till en avslutande } i read_convert och byter ut main till dettablir det inga fel eller varningar.
Trots att denna rad i read_convert inte gör någontingDet är en tom sats, men kompilatorn måste nog generera en läsning av ADMUX eftersom den är volatile. Det skall troligen ståi stället. (Om man nu vill ha vänsterjusterat resultat) (men det kan man lika gärna flytta till init_ADC() i så fall).
Kod: Markera allt
$ avr-gcc -c -Os -Wall -mmcu=atmega328p test.c
test.c: In function ‘read_convert’:
test.c:41: warning: ‘main’ is normally a non-static function
test.c: In function ‘main’:
test.c:47: error: too few arguments to function ‘read_convert’
test.c: In function ‘read_convert’:
test.c:60: error: expected declaration or statement at end of input
Om jag lägger till en avslutande } i read_convert och byter ut main till detta
Kod: Markera allt
int main(void)
{
init_ADC();
init_PWM();
DDRB|=(1<<PB5);// Pin PB5(OCR1A) är output
DDRB|=(1<<PB6);//Pin PB6(OCR1B) är output
while(1)
{
// read_ADC() returns a left adjusted result (or?...)
// use >> 8 to get upper eight bits (or >>6 to get upper 10)
OCR1A=read_convert(4) >> 8;//converterad värde läses på pin PB5
OCR1B=read_convert(5) >> 8;//converterad värde läses på pinPB6
}
}
Trots att denna rad i read_convert inte gör någonting
Kod: Markera allt
ADMUX | (1<<ADLAR);//Vänsterjustering av ADC resultet
Kod: Markera allt
ADMUX |= (1<<ADLAR);//Vänsterjustering av ADC resultet