Hallo leute ich versuche ein klein programm test zu schreiben. das
programm soll das 5. bit des Port D jede 70s Toggle in meinem Programm
fehlt wahrscheinlich jegen etwas. Bitte ich brauche Ihre Hilfe Leute.
Danke
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#define isr(vector)
#define sleep
// Die Routine Function schaltet das 5.bit des Ports D jede 71 ms um.
ISR(TIMER1_COMPA_vect)
{
TIFR=0x10; /*Aufruf des Interrupt um das bit zu Toggle*/
TCNT1= 0x000; // Counter wieder auf null setzen um die
//Prozess zu wiederholen;
}
// Hauptprogramm: Innitialisierung der benötigten Registern und Aufruft
der //Routine Function
int main(void){
DDRD=0x0FFFF; //Daten Richtung zu Port D
PORTD=0x20; /*pin 5 des Ports D setzen*/
TCCR1B=0x4; //Prescaler = 256: signalstakt=clk/256
TCNT1=0x00; /*Counter auf null initialisieren*/
OCR1A=0x03EA; /*es wird bis zu 1000 dez. gezählt um 71
ms zu erreichen hier Prescaler = 256*/
sei();
TIFR=0x10; /*Aufruf des Interrupt um das bit zu Toggle*/
TIMSK=0x10; /*output Compare A Match Interrupt Enable*/
while(1)
{
}
}
ich will nur sagen dass, meine Platine ist die Atmega16 und ich benutze WinAVR um meinem Programm zu schreiben.
klick mal da oben links auf "avr-gcc-tutorial", vl. hilfts schneller als ich/wir das können: - Hex-Zahlen(0xnn...) haben meistens 2, 4, oder 8 Stellen( sind 8, 16, 32Bit) - die "REG |=(1<<NAME)"oder "REG &= ~(1<<NAME)" Schreibweise erleichtert die Fehlersuche enorm! (ich werde nicht nachschauen, was deine Zahlen bedeuten, aber vl. jemand anders) - wenn du sowieso den "Output-compare-Interrupt" benutzt, kannst du auch gleich den CTC (-> steht im Datenblatt) Mode benutzen - was soll "#define sleep" und "#define isr(vector)" heißen?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.