AVR Nybörjar Fel

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
rex2005
Inlägg: 27
Blev medlem: 2 februari 2010, 00:55:47

AVR Nybörjar Fel

Inlägg 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
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: AVR Nybörjar Fel

Inlägg 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
rex2005
Inlägg: 27
Blev medlem: 2 februari 2010, 00:55:47

Re: AVR Nybörjar Fel

Inlägg 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 ?
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: AVR Nybörjar Fel

Inlägg av johano »

Ta bort #include från asmfilen så borde den gå igenom assemblern.

/johan
rex2005
Inlägg: 27
Blev medlem: 2 februari 2010, 00:55:47

Re: AVR Nybörjar Fel

Inlägg 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
Nerre
Inlägg: 27257
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: AVR Nybörjar Fel

Inlägg 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).
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Re: AVR Nybörjar Fel

Inlägg 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;
}

Skriv svar