hallo,

het is me vandaag voor het eerst gelukt om iets in een avr te krijgen.

op deze site staat een programmatje om een servo te laten bewegen: http://expand.xs4all.nl/avr/servo.html

met deze code:

#include <avr/io.h>
#include <util/delay.h>

int main()
{
// timer1: fast pwm, clear OC1B on match
TCCR1A = (1 << COM1B1) | (1 << WGM11) | (1 << WGM10);
// timer1: fast pwm, ctc top=OCR1A, clk/1
TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10);
OCR1A = 20000; // 20ms
OCR1B = 1500; // 1.5ms

DDRB |= (1 << PB4); // PB4/OC1B as output

uint16_t servoTiming; // servo timing in us

while(1)
{
// slowly turns servo from one side to the other
for(servoTiming = 1000; servoTiming < 2000; servoTiming++)
{
OCR1B = servoTiming;
_delay_ms(10);
}
// slowly turns the servo back
for(servoTiming = 2000; servoTiming > 1000; servoTiming--)
{
OCR1B = servoTiming;
_delay_ms(10);
}
}

return 0;
}

als ik deze code met avr studio compil. krijg ik netjes een bestandje die ik zo me avr in dan laden.

maar daarna als ik me servo aan sluit gebeurt er niks.

wat doe ik fout?

nog een ander vraagje hoe lees je een schakelaar in op je avr in C ?

stef

Wat ik mis in je broncode, is de frequentie waarop de AVR draait. De delay-routines, die uiteraard afhankelijk zijn van deze frequentie, gaan default uit van 1MHz (hetgeen meestal de fabrieks-default is). Als je een andere frequentie gebruikt, declareer dat dan met bv. (voor een 14.7456MHz kristal)


#define F_CPU 14745600UL

met dat regeltje er bij werkt het nog steeds niet :(

stef

pros: dat gebeurd in de makefile van het compilen, moet je dus instellen bij de opties in avr studio (project options ofzo).

verder, de atmega16 heeft geen 14,7.. etc kristal volgens mij, maar een normaal 4mhz interne oscillator.

en dan nog iets (aan TS), hoe sluit je de servo aan, op welke poort? en heb je er misschien aan gedacht dat een attiny2313 iets anders is dan een atmega16? kijk de datasheets er ff p na.

PB4 lijkt me het zelfde zit alleen op een andere pin.

ik ben gisteren begonnen met het programmeren van avrs dus veel verstand heb ik er niet van.

stef

het is me gelukt ik heb hem draaient gekregen :)

stef

Stef, ik heb niet genoeg tijd om alle fouten zelf te maken... Ik wil leren van jou fouten... Wat was het nu?

ik had van PB4 PD4 gemaakt en daar draaide hij wel op.

stef