C Kompilierung im Avr-Studio

OP #451917
Hallo,

ich habe versucht die pwm des 8-bit timers eines ATmega 8 in C zu 
programmieren.

#include<avr/io.h>
void main(void)
{
  DDRB |= (1<<DDB3);
  TCCR0 |= (1<<WGM00)|(1<<COM01)|(1<<CS00);
  while(1)
  {
  OCR0 = 0x11;
  }
}

Beim kompilieren über das Winavr plug-in für Avr-Studio gelang es mir 
nicht das Register OCR0 zu "beschreiben", sonst läuft alles. Mit einem 
externen Makefile war es möglich, ebenso direkt in Winavr. Hat jemand 
eine Ahnung, welche Einstellungen im Avr-Studio vorgenommen werden 
müssen um einen reibungsfreien Ablauf über das plug-in zu gewährleisten? 
Oder denkt Ihr, das ist sowieso totaler Schrott?
Wenn ich deinen Code durchjage, kriege ich
1
avr-gcc.exe  -mmcu=atmega8 -Wall -gdwarf-2 -O0 -MD -MP -MT Forum3.o -MF dep/Forum3.o.d  -c  ../Forum3.c
2
../Forum3.c:3: warning: return type of 'main' is not `int'
3
../Forum3.c: In function `main':
4
../Forum3.c:5: error: `WGM00' undeclared (first use in this function)
5
../Forum3.c:5: error: (Each undeclared identifier is reported only once
6
../Forum3.c:5: error: for each function it appears in.)
7
../Forum3.c:5: error: `COM01' undeclared (first use in this function)
8
../Forum3.c:8: error: `OCR0' undeclared (first use in this function)
9
make: *** [Forum3.o] Error 1

Da du die ersten 2 undefined references nicht kriegst, gehe
ich mal davon aus, dass du keinen Mega8 eingestellt hast.
1
avr-gcc.exe  -mmcu=atmega16 -Wall -gdwarf-2  -O0 -fsigned-char -MD -MP -MT Forum3.o -MF dep/Forum3.o.d  -c  ../Forum3.c
2
../Forum3.c:3: warning: return type of 'main' is not `int'
3
avr-gcc.exe -mmcu=atmega16  Forum3.o     -o Forum3.elf
4
avr-objcopy -O ihex -R .eeprom  Forum3.elf Forum3.hex
5
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex Forum3.elf Forum3.eep
6

7
AVR Memory Usage
8
----------------
9
Device: atmega16
10

11
Program:     178 bytes (1.1% Full)
12
(.text + .data + .bootloader)
13

14
Data:          0 bytes (0.0% Full)
15
(.data + .bss + .noinit)

kompiliert wunderbar.
Doch. Klappt wunderbar.

Richte dein Augenmerk mal auf das Datenblatt, Seite
83. In der Tabelle 38, steht in der Zeile "PWM, Phase
Correct" eindeutig, dass der OCR0 Wert erst dann ins
eigentliche OCR0 Register übernommen wird, wenn der Zähler
seinen TOP Wert erreicht hat.
Und ganau das passiert. Der Zähler zählt hoch und hoch.
In dem Moment, in dem er 0xFF erreicht hat, wird OCR0
zu 0x11 und der Zähler zählt wieder runter.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.