Sida 1 av 1

AVR Nybörjar Fel

Postat: 2 februari 2010, 23:05:25
av rex2005
Hej tänkte dra igång mitt gamla AVR Bord nu igen och det krånglar lite sedan sistn man var där : )

Det är tänkt att få en PWM signal ut med 50% .

Kod: Markera allt

#include <avr/io.h>

int main(void){

#define PULSE_WIDTH 0x7F

void pwm_start(){
        OCR1AL = PULSE_WIDTH;
        OCR1AH = 0;
        DDRD |= (1<<5); 
        TCCR1A = 0x81;
        TCCR1B = 1;
}

return 1;
}

Felmedelandet jag får är

Kod: Markera allt

AVRASM: AVR macro assembler 2.1.42 (build 1796 Sep 15 2009 10:48:36)
Copyright (C) 1995-2009 ATMEL Corporation

C:\Users\Slim\Documents\8535\8535.asm(1): Including file 'C:\WinAVR-20100110\avr\include\avr/io.h'
C:\WinAVR-20100110\avr\include\avr/io.h(99): Including file 'C:\WinAVR-20100110\avr\include\avr/sfr_defs.h'
C:\WinAVR-20100110\avr\include\avr/sfr_defs.h(126): Including file 'C:\WinAVR-20100110\avr\include\inttypes.h'
C:\WinAVR-20100110\avr\include\inttypes.h(37): Including file 'C:\WinAVR-20100110\avr\include\stdint.h'
C:\WinAVR-20100110\avr\include\stdint.h(121): error: typedef: Unknown instruction or macro
C:\WinAVR-20100110\avr\include\inttypes.h(37): info: 'C:\WinAVR-20100110\avr\include\stdint.h' included from here
C:\WinAVR-20100110\avr\include\avr/sfr_defs.h(126): info: 'C:\WinAVR-20100110\avr\include\inttypes.h' included from here
C:\WinAVR-20100110\avr\include\avr/io.h(99): info: 'C:\WinAVR-20100110\avr\include\avr/sfr_defs.h' included from here
C:\Users\Slim\Documents\8535\8535.asm(1): info: 'C:\WinAVR-20100110\avr\include\avr/io.h' included from here
C:\WinAVR-20100110\avr\include\stdint.h(121): error: syntax error, unexpected FUNCTION
C:\WinAVR-20100110\avr\include\inttypes.h(37): info: 'C:\WinAVR-20100110\avr\include\stdint.h' included from here
C:\WinAVR-20100110\avr\include\avr/sfr_defs.h(126): info: 'C:\WinAVR-20100110\avr\include\inttypes.h' included from here
C:\WinAVR-20100110\avr\include\avr/io.h(99): info: 'C:\WinAVR-20100110\avr\include\avr/sfr_defs.h' included from here
C:\Users\Slim\Documents\8535\8535.asm(1): info: 'C:\WinAVR-20100110\avr\include\avr/io.h' included from here

Assembly failed, 2 errors, 0 warnings

Felen pekar på dessa rader

Kod: Markera allt

typedef int int8_t __attribute__((__mode__(__QI__)));
typedef unsigned int uint8_t __attribute__((__mode__(__QI__)));
typedef int int16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int uint16_t __attribute__ ((__mode__ (__HI__)));
typedef int int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int uint32_t __attribute__ ((__mode__ (__SI__)));

#if !__USING_MINT8
typedef int int64_t __attribute__((__mode__(__DI__)));
typedef unsigned int uint64_t __attribute__((__mode__(__DI__)));
#endif

Har för mej att jag fått något fel innan när jag höll på med detta och då fungera det fin utan de raderna men nu får man en lång fin lista om man plockar väck dem.

Tackar

Re: AVR Nybörjar Fel

Postat: 2 februari 2010, 23:12:39
av johano
Du försöker köra en C-fil genom AVRASM (assembler)

Dessutom bör du nog flytta ut #define och pwm_start()
utanför main()

/johan

Re: AVR Nybörjar Fel

Postat: 2 februari 2010, 23:43:33
av rex2005
Tack för ditt snabba svar.

Jag har alltid kört med C i AVRStudion tidigare men tästade med Assembler kod ist och fick samma felmedelande.

Kod: Markera allt

#include <avr/io.h>

.equ pulse_width = $7F

PWM_START:
        ldi temp, pulse_width  
        out OCR1AL, temp        
        clr temp
        out OCR1AH, temp

        ldi temp, $81           
        out TCCR1A, temp       

        in temp, DDRD           
        ori temp, (1<<5)
        out DDRD, temp

        ldi temp, $1           
        out TCCR1B, temp
        ret 
Detta borde fungera rent tekniskt egentligen väll ?

Re: AVR Nybörjar Fel

Postat: 2 februari 2010, 23:49:46
av johano
Ta bort #include från asmfilen så borde den gå igenom assemblern.

/johan

Re: AVR Nybörjar Fel

Postat: 2 februari 2010, 23:57:14
av rex2005
Löste problemet nu : )

Har antagligen kört med GCC innan fungerade fint med denna kod nu i AVR-GCC

Kod: Markera allt

#include <avr/io.h>
#include <inttypes.h>

#define PULSE_WIDTH 0x7F

int main(void){

void pwm_start(){
        OCR1AL = PULSE_WIDTH;   
        OCR1AH = 0;
        DDRD |= (1<<5);         
        TCCR1A = 0x81;      
        TCCR1B = 1;        
}
return 0;
}

Tackar johano

Re: AVR Nybörjar Fel

Postat: 3 februari 2010, 07:54:49
av Nerre
Problemet var ju att io.h är en C-fil (du hade den med i båda försöken som du försökte köra med assemblern).

Re: AVR Nybörjar Fel

Postat: 4 februari 2010, 17:10:39
av stekern
Men du deklarerar fortfarande en funktion inne i main, och return får aldrig nås så du skall ha en oändlig loop i main. Det du försöker göra borde vara något sånt här:

Kod: Markera allt

#include <avr/io.h>
#include <inttypes.h>

#define PULSE_WIDTH 0x7F
void pwm_start(){
        OCR1AL = PULSE_WIDTH;   
        OCR1AH = 0;
        DDRD |= (1<<5);         
        TCCR1A = 0x81;     
        TCCR1B = 1;       
}

int main(void){
        pwm_start();
        for(;;) {
                ; //main loop 
        }
return 0;
}