Forum: Mikrocontroller und Digitale Elektronik Timer controller


von J.Pascal (Gast)


Lesenswert?

Hallo Leute, ich versuche ein programm im c zu schreiben. in meinem 
programm möchte ich jede 70ms ungefährt ein interrupt aufrufen um das 5. 
bit des Ports D(OC1A)Toggle. ich habe ein code geschrieben aber bei der 
kompilierung habe ich 2 fehler meldung und ich verstehe nicht was die 
fehler bedeutet. ich zeige hier Ihnen mein code und untern steht die 
Fehler meldung. und ich bitte Ihre Hilfe P.S.: meine Platine ist die 
ATmega16 von ATmel und ich bin eine new kommen im Bereich 
Mikrocontroller Programmierung
und ich Bitte Ihre verständnis.


#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#define isr(vector)

int main(void){
 DDRD=0x32;                       /*pin 5 des Ports D setzen*/
 TCNT=0x0000;                    /*Counter auf null initialisieren*/
 OCR1A=0x03EA;                   /*es wird bis zu 1000 dez. gezählt*/


      ISR_Timer(){

        TIMSK=0x10;       /*output Compare A Match Interrupt Enable*/
        TIFR=0x10;        /*Aufruf des Interrupt um das bit zu Toggle*/
        }
 while(1){
            }


        return 0;
        }

Fehler meldung:
-------- begin --------
avr-gcc (GCC) 4.1.1 (WinAVR 20070122)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is 
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR 
PURPOSE.

make.exe: *** No rule to make target `main.o', needed by `main.elf'. 
Stop.

> Process Exit Code: 2

von johnny.m (Gast)


Lesenswert?

Ich glaube, Dir fehlen wirklich grundlegende Verständnisse. Du solltest 
Dir das Tutorial durcharbeiten. Da steht eigentlich alles drin.

> TIMSK=0x10;       /*output Compare A Match Interrupt Enable*/
Wenn Du den Compare-Ausgang OC1A toggeln willst, brauchst Du den 
Interrupt nicht freizugeben. In Deinem Fall sogar im Gegenteil: Wenn Du 
ihn freigibst, aber keine ISR dazu geschrieben hast, führt jedes 
Compare-Ereignis unweigerlich zu einem Reset!

> TIFR=0x10;        /*Aufruf des Interrupt um das bit zu Toggle*/
Damit löschst Du nur das Interrupt-Flag. Du kannst "den Interrupt" nicht 
auf diese Weise vom Programm aus "aufrufen".

von johnny.m (Gast)


Lesenswert?

Ach ja, die Fehlermeldung besagt eigentlich nur, dass Du vermutlich 
vergessen hast, bestimmte Einstellungen zu machen. Ich gehe davon aus, 
dass Du mit AVRStudio arbeitest. Da musst Du erst mal in den 
Configuration Options den Controllertyp (wichtigst, da sonst nicht 
bekannt ist, welche io.h eingebunden werden soll) und die CPU-Frequenz 
(in Deinem Fall eher egal, weil sie in Deinem Programm nicht verwendet 
wird) eingeben und solltest auch das Optimierungslevel auf -Os stellen 
(jedenfalls nicht auf -O0 lassen).

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
Noch kein Account? Hier anmelden.