Userinfo & Login
Zurück   AVR-PRAXiS-Forum > AVR-Mikrocontrollerfamilie > Hardware > Timer
Timer 16bit und 8bit Timer (Timermodi, PWM, Capture-Compare-Unit, Timer-Interrupt)
Antwort
 
Themen-Optionen Ansicht

  #1  
Alt 03.02.2010, 15:04
vianney vianney ist offline
Benutzer
 
Registriert seit: 11.11.2009
Beiträge: 7
Standard timer und pwm

hallo an alle
ich hoffe ihr könnt mir helfen, hab folgendes problem. ich muss mittels taster die periode und die pulsbreite eines pwm-signals an einem atmega88 mit avr steuern. idealerfall wäre mit 2 taster meine periode ändern d.h wenn s1 gedrückt (inkremetiert) die periode wird größer, wenn auf s2, wird kleiner. und das gleich auch für die pulsbreite mit den 2 restlichen tastern. die period sollte zwischen 50ms-250ms sein, und die pulsbreite zwischen 4ms-20ms.ich hab halt schon mien pwm erzeugt, und wie man die tasteer ansteuert weiss auch schon, hab schon sogar schon geschaft meine pulsbreite zu steuern, durch mein ocr1b-wert. aber jetzt will wiessen wie ich dann meine period mit den restlichen tastern ansteuern sollte, ob ich dafür ein interrupt brauche? ich schicke auch anbei mein bis jetzt fertiges code damit irh euch es auch angückt
danke
// Funktion Tastenentprellen // ---------------------------------- inline uint8_t debounce(volatile uint8_t *port, uint8_t pin) // uint8 = unsigned int 8 bit (eigentlich char) // inline= einlesen, volatile = übergabe vom port und pin von HW { if(!(*port & (1<<pin))) { //pin wurde auf masse gezogen, 100ms warten _delay_ms(100); if((*port &(1<<pin))) { // Anwender Zeit zum Loslassen des Tasters gegeben _delay_ms(100); return (true); } } return 0; } int main (void) //Hauptprogramm { DDRB |= (1 << PB2); TCCR1A |= (1<<COM1B0)|(1<<COM1B1) ; TCCR1B |= (1<<WGM13)|(1<<CS10)|(1<<CS12); OCR1B=410; //min pulsbreite 4ms ICR1 = 450; //min period 50ms while(1) { ButtonControl(); if(S1) // für die pulsbreite { OCR1B=OCR1B-9; S1=false; if(OCR1B<270) { OCR1B=270; } } if(S2) //für die pulsbreite { OCR1B=OCR1B+9; S2=false; if(OCR1B>410) { OCR1B=410; } } if(S3) // für die period { } if(S4) // für die period { } } return 0; } void ButtonControl() { char SavePORTC = PORTC; char SaveDDRC = DDRC; PORTC |= (1<<PC0) | (1<<PC1)| (1<<PC2)| (1<<PC3) ; //Interne Pull-Up-Widerstände einschalten DDRC &= ~((1<<DDC0) | (1<<DDC1)| (1<<DDC2)| (1<<DDC3)); //Port C auf Input(0) geschalten if (debounce(&PINC, PC0)) //Taste S1 { S1=true; } if (debounce(&PINC, PC1)) //Taste S2 { S2=true; } if (debounce(&PINC, PC2)) //Taste S3 { S3=true; } if (debounce(&PINC, PC3)) //Taste S4 { S4=true; } PORTC = SavePORTC; DDRC = SaveDDRC; }
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Timer und PWM Walter Timer 6 02.02.2010 08:19


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:14 Uhr.

Powered by vBulletin® Version 3.6.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
vBulletin Style by: vbdesigns.de
AVR-PRAXiS V.2007 I © Copyright 2007 by Dirk Rodenhausen