Beste mensen
Kan iemand mij vertellen hoe je een timer met het PWM kanaal OCR0 kan mee laten lopen.
Ik kan namelijk wel van 0-255 instellen en dan brand mijn led die ik er op aan gesloten heb op de sterkte die ik in gegeven heb bv. OCR0 = 100:
Ik heb ook al geprobeerd for (OCR0=10; OCR0 >200; OCR0++).
Maar het werk niet
Het OCR1A en OCR1B werkt wel dan zie je de led langzaam oplichten maar ik wil er nog een led bij hebben met OCR0.
Vast bedankt
uw for-lus is verkeerd.
Probeer dit eens:
for (OCR0=10; OCR0<200; OCR0++)
Vergeet ook zeker geen delay in te bouwen in uw lus want anders ga je in een fractie van een seconde door de lus gelopen zijn.
Op 9 maart 2009 13:44:30 schreef Miyagi:
uw for-lus is verkeerd.
Probeer dit eens:
for (OCR0=10; OCR0<200; OCR0++)Vergeet ook zeker geen delay in te bouwen in uw lus want anders ga je in een fractie van een seconde door de lus gelopen zijn.
Hoi Miyagi
Ik heb het even veranderd en de delay heb ik ook in de lus staan maar er gebeurd niks blijft alleen reageren op OCR0 en een getal van 0 tot 255 nog ideeen
vast bedankt
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
Op 9 maart 2009 23:46:01 schreef Marcel:
Hoe initialiseer je de timer? Laat ook eens de rest van het programma zien.
#include <avr/io.h>
#include <avr/interupt.h>
#include < util/delay.h>
ISR (TIMER0_COMP_vect)
{
DDRB =(1<<DDB3);
}
int main()
{
TCCRO |=(1<<WGM01) |(1<<WGM00);
TCCR0 |= (1<<COM01);
TCCR0 |= (1<<CS02);
TIMSK =(1<<OCIE0);
OCR0=1;
sei();
uint8_t count;
{
for (count=1; count<230;count++)
_delay_ms (20);
OCR0 = count;
{
return 0;
}
}
}
dit is het programma en de led gaat aan op 1 en naar de delay springt hij naar 230 maar loopt niet langzaam op van 1 t/m 230
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Zoals jij het schrijft, wordt "OCR0 = count;" maar 1 maal uitgevoerd - het maakt immers geen deel uit van je for() lus. Wil je dat wel, dan moet je haakjes plaatsen.
Probeer dit eens:
#include <avr/io.h>
#include <avr/interupt.h>
#include < util/delay.h>
int main()
{
DDRB =(1<<DDB3); // PB3 = PWM-uitgang
TCCRO |=(1<<WGM01) |(1<<WGM00); // Fast PWM
TCCR0 |= (1<<COM01); // Clear OC0 on compare match
TCCR0 |= (1<<CS02); // Prescaler = 8
OCR0=1;
uint8_t count;
while(1) {
for (count=1; count<230; count++) {
_delay_ms (20);
OCR0 = count;
}
}
}
Op 10 maart 2009 08:41:18 schreef pros:
Zoals jij het schrijft, wordt "OCR0 = count;" maar 1 maal uitgevoerd - het maakt immers geen deel uit van je for() lus. Wil je dat wel, dan moet je haakjes plaatsen.
Probeer dit eens:#include <avr/io.h> #include <avr/interupt.h> #include < util/delay.h> int main() { DDRB =(1<<DDB3); // PB3 = PWM-uitgang TCCRO |=(1<<WGM01) |(1<<WGM00); // Fast PWM TCCR0 |= (1<<COM01); // Clear OC0 on compare match TCCR0 |= (1<<CS02); // Prescaler = 8 OCR0=1; uint8_t count; while(1) { for (count=1; count<230; count++) { _delay_ms (20); OCR0 = count; } } }
Hoi pros
Het werkt ik wil je bedanken man, ik ben nog niet zo lang bezig met C ben met diverse boeken bezig om het te leren.
Maar in dit forum kan je veel meer leren dank zij jullie.
Is er nog boek waar het begrijpen van C duidelijk uit gelegd word alles is zo beknopt in de boeken die ik heb.
Nogmaals bedankt
klompie