Forum: Mikrocontroller und Digitale Elektronik Interrupt AVR Amteg32


von Bernd H. (bernd79)


Angehängte Dateien:

Lesenswert?

Hallo,

versuche mich gerade in MC einzuarbeiten und wollte mit Hilfe des 
Interrupts ne LED zum blinken bringen! Will lernen wie man den Interrupt 
benutzt.

Leider gibt der Compiler nur Fehler zurück?

"bool" nicht erkannt / TOV0 nicht erkannt (obwohl dies das 
Interruptregister sein soll) etc.... ?

Was mache ich falsch ?

Programm liegt in der Textdatei

von jeeeeees (Gast)


Lesenswert?

TOV0 ist das Bit, nicht das Register. Um den Wert auf 0 zu setzen musst 
du das ganze Register schreiben.
1
TIFR &= ~(1 << TOV0))

von jeeeeees (Gast)


Lesenswert?


von Bernd H. (bernd79)


Lesenswert?

Laut anderer Beschreibung ist TOV0 das Überlaufflag vom Zählerregister 
Timer0?

Wieso erkennt er das Format "bool" nicht?

von Peter R. (pnu)


Lesenswert?

Vielleicht weil es boole heißt, denn der namensgebende Mathematiker hieß 
Boole (mit e am Ende)

von amateur (Gast)


Lesenswert?

Wie wäre es mit ein Bissel "sei ();" auf deinem Wege. Ob Du die 
zugehörigen Register richtig initialisiert hast weiß ich aber nicht.

von amateur (Gast)


Lesenswert?

Mir fällt gerade auf, dass Du die Interruptroutine innerhalb main 
deklariert hast...
Dat mag schon der Conpilerich nit.

von Karl H. (kbuchegg)


Lesenswert?

Bernd H. schrieb:

> Wieso erkennt er das Format "bool" nicht?


Weil 'bool' im ursprünglichen C nicht enthalten war. Um 'bool' benutzen 
zu können musst du den Header stdbool.h includieren.

Aber das löst dein Problem nicht, dass du dir unter TOV0 etwas anderes 
vorstellst, als es tatsächlich ist.

TOV0, CS00, ...  das alles sind einfach nur Zahlenwerte, die die 
Bitposition bezeichnen, an denen das jeweilige Bit in einem bestimmten 
Register zu finden ist.

von Peter D. (peda)


Lesenswert?

Bernd H. schrieb:
> Wieso erkennt er das Format "bool" nicht?

Weil es das im C-Standard nicht gibt.


Peter

von amateur (Gast)


Lesenswert?

Wenn Du den Kram geändert hast, häng' mal den neuen Source, mit neuem 
Namen an. Damit alle über das Gleiche reden können.

von Bernd H. (bernd79)


Lesenswert?

Komisch daran ist, AVR Studio erkannt "bool" an!
Macht aber nachher ein Fehler aus beim Kompilieren??

Das ist nicht alles wirklich hilfreich!
Hab noch nicht viel Erfahrung, was MC angeht.

Ziel ist es ein Programm zuschreiben:

Timer0 soll hoch zählen Interrupt auslösen und im HP ein Bit toggeln

von Bernd H. (bernd79)


Lesenswert?

Ok. ich les mir nochmal das was zu timer0 steht durch und werd stdbool.h 
noch einbinden

von amateur (Gast)


Lesenswert?

Wenn Du stdbool nicht einbinden möchtest, hilft vielleicht ein:

#define  bool unsigned char

gefolgt von

#define  false 0

und

#define  true 1

am Programmanfang.

von Bernd H. (bernd79)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Bernd H. schrieb:
>
>> Wieso erkennt er das Format "bool" nicht?
>
>
> Weil 'bool' im ursprünglichen C nicht enthalten war. Um 'bool' benutzen
> zu können musst du den Header stdbool.h includieren.
>
> Aber das löst dein Problem nicht, dass du dir unter TOV0 etwas anderes
> vorstellst, als es tatsächlich ist.
>
> TOV0, CS00, ...  das alles sind einfach nur Zahlenwerte, die die
> Bitposition bezeichnen, an denen das jeweilige Bit in einem bestimmten
> Register zu finden ist.


Ich lese gerade in http://www.tschallener.net/AVR/timer0.pdf
Hier steht, das TOV0 im Reg TIFR nur ein Flag ist

Kann man den die Bit in den Registern nicht direkt mit ihrem 
Namenansprechen?
Also TOV0 = 1;

von Karl H. (kbuchegg)


Lesenswert?

Bernd H. schrieb:

> Ich lese gerade in http://www.tschallener.net/AVR/timer0.pdf
> Hier steht, das TOV0 im Reg TIFR nur ein Flag ist

Das ist ja auch grundsätzlich richtig.

> Kann man den die Bit in den Registern nicht direkt mit ihrem
> Namenansprechen?
> Also TOV0 = 1;

Nein.

Wie setzt du denn ein Portbit an einem Port auf 1?

   PORTB |= ( 1 << PB0 );

Auch PB0 ist so gesehen nur ein Bit in einem Register, nämlich das Bit 0 
im Register PORTB.

AVR-Gcc-Tutorial

Tu dir einen Gefallen und fang dort zu lesen an.

von amateur (Gast)


Lesenswert?

Manche C-Compiler fressen auch Konstrukte wie:

cbi (DDRA,PA0);

Dabei wird das Bit 0 vom "Port A Data Direction Register" direkt 
gelöscht.

von Bernd H. (bernd79)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Nein.
>
> Wie setzt du denn ein Portbit an einem Port auf 1?
>
>    PORTB |= ( 1 << PB0 );
>
> Auch PB0 ist so gesehen nur ein Bit in einem Register, nämlich das Bit 0
> im Register PORTB.
>
> AVR-Gcc-Tutorial
>
> Tu dir einen Gefallen und fang dort zu lesen an.

Das Tutorial kann ich nicht öffenen

Oh gott, oh gott wie kann man bloß einfache Dinge bloß so komplizieren!
Es gibt keine dirkete Bit adriessung ?
Ist das ein Problem den AVR oder Atmega oder kann der kein C++?

Also PIGS habe ich immer so adressiert

von Thomas E. (thomase)


Lesenswert?

Bernd H. schrieb:
> Also PIGS habe ich immer so adressiert
Die ham ja auch'n Ringelschwanz.

mfg.

von Karl H. (kbuchegg)


Lesenswert?

Bernd H. schrieb:
> Karl Heinz Buchegger schrieb:
>> Nein.
>>
>> Wie setzt du denn ein Portbit an einem Port auf 1?
>>
>>    PORTB |= ( 1 << PB0 );
>>
>> Auch PB0 ist so gesehen nur ein Bit in einem Register, nämlich das Bit 0
>> im Register PORTB.
>>
>> AVR-Gcc-Tutorial
>>
>> Tu dir einen Gefallen und fang dort zu lesen an.
>
> Das Tutorial kann ich nicht öffenen
>

AVR-GCC-Tutorial


> Oh gott, oh gott wie kann man bloß einfache Dinge bloß so komplizieren!
> Es gibt keine dirkete Bit adriessung ?

Gegenfrage: Hast du schon mal C gelernt oder ratest du einfach nur 
drauflos?

von amateur (Gast)


Lesenswert?

Auch wenn es von verschiedener Seite bereits, mehr oder weniger 
freundlich, angesprochen wurde: Es lohnt sich mal ins "AVR-GCC-Tutorial" 
zu schauen. Den Eingang findest du hier auf der Homepage.
Bitte verstehe: Die Meisten hier helfen gerne, wenn aber zu viel an 
Grundlagen fehlt, so werden sie leicht unwirsch.
Viele haben das Motto: Helfen: Ja; Tipps geben: Gerne; Lehren: Nein!

von Bernd H. (bernd79)


Lesenswert?

amateur schrieb:
> Auch wenn es von verschiedener Seite bereits, mehr oder weniger
> freundlich, angesprochen wurde: Es lohnt sich mal ins "AVR-GCC-Tutorial"
> zu schauen. Den Eingang findest du hier auf der Homepage.
> Bitte verstehe: Die Meisten hier helfen gerne, wenn aber zu viel an
> Grundlagen fehlt, so werden sie leicht unwirsch.
> Viele haben das Motto: Helfen: Ja; Tipps geben: Gerne; Lehren: Nein!

Nein ist schon ok.
Hab leider dieses Projekt aufs Auge drückt bekommen und Zeit drängt halt 
was :(
hab früher mal PIC in C++ programmiert (vor 10 Jahren+ und es war auch 
nicht viel) und diese wurden halt genau so Bit adressiert. Jetzt ist das 
komplettes Neuland quasi und nichts läuft.... die Synthax ist mir 
vollkommen fremd.

Problem mein kleines Wissen von damals deckt sich wohl mit dem von heute 
nicht. Das macht die Sache noch schwieriger weil ich nochmal komplett 
umdenken muss.

Dachte das wäre das schöne an Compilern, das eben nicht neue Synthax 
lernen müste. Komisch ist das es wieder komplett anders ist.

Ich wälze mal das Tutorial

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.