Hallo,
ich möchte bei meinem selbstgebauten funktionsgenerator die freuenz
auslesen und auf ein display ausgeben. die frequenz lässt sich von
5Hz-15kHz einstellen. ich möchte mit dem timer0 eine torzeit von 200ms
abfragen welche wie viele positive flanken timer1 gezählt hat.
leider funktioniert es noch nicht so. feste variablen lassen sich im
display anzeigen. jedoch funktionieren die interrupts noch nicht so.
sobald ich die interrupts mit "sei();" antivieren möchte, schreibt er
nichts mehr ins display.
das ist mein code bis jetzt:
cdatei:
die letzte } auskommentiert?
Du musst unbedingt dein Einrückschema verbessern. Im Moment sieht man
bei dir nur sehr schwer, wo eine { anfängt bzw. wo die korrespondierende
} ist.
Meiner Zählung nach müsste die auskommentierte } eigentlich nicht
auskommentiert sein.
Und tu dir selbst einen Gefallen und schaff dir erst mal eine
unabhängige Software-Ebene, in der du die LCD Funktionen ansiedelst. Das
hat keinen wirklichen Sinn, wenn du die Portzugriffe da mitten in deinen
Applikationscode einbaust.
Da sieht man ja den Wald vor lauter Bäumen nicht mehr.
Ein Minialsatz an Funktionen wäre zb
lcd_init()
lcd_gotoxy( uint8_t line, uint8_t column )
lcd_char( char c )
lcd_string( const char* str )
> jedoch funktionieren die interrupts noch nicht so.> sobald ich die interrupts mit "sei();" antivieren möchte, schreibt> er nichts mehr ins display.
Sowas ist normalerweise ein starker Hinweis darauf, dass du irgendwo
einen Interrupt freigegeben hast, für den du keine ISR hast.
Hast du hier
ohh das auskommentiere habe ich versehendlich mitkopiert. das habe ich
schon geändert. ja das stimmt der code ist noch nicht sehr schön. aber
ich möchte ja erstmal das es funktioniert. das display zeit ja das
richtige an, wenn ich was von hand in die variablen schreibe. die
interrupts funktionieren nur nicht. es kommen auch 3 warnungen:
../funktionsgenerator.c:48: warning: return type defaults to `int'
../funktionsgenerator.c: In function `ISR':
../funktionsgenerator.c:48: warning: type of "TIMER0_OVF_vect" defaults
to "int"
../funktionsgenerator.c:55: warning: control reaches end of non-void
function
was bedeuten die?
Tobias schrieb:> ohh das auskommentiere habe ich versehendlich mitkopiert. das habe ich> schon geändert. ja das stimmt der code ist noch nicht sehr schön. aber> ich möchte ja erstmal das es funktioniert.
Das ist ein Irrtum.
Du rennst Fehlern nach, die nicht sein müssen. UNd alles nur deswegen,
weil du sie selber nicht siehst.
Ausserdem erlaubt dir ein vernünftiger Satz an LCD Funktionen problemlos
und ohne großen Aufwand, dir Testausgaben ins Programm einzubauen, so
dass du selber leicht nachvollziehen kannst, was da passiert.
> ../funktionsgenerator.c:48: warning: return type defaults to `int'> ../funktionsgenerator.c: In function `ISR':> ../funktionsgenerator.c:48: warning: type of "TIMER0_OVF_vect" defaults> to "int"> ../funktionsgenerator.c:55: warning: control reaches end of non-void> function>> was bedeuten die?
Das die Interrupt Funktion auf deinem µC anders heißt.
Karl Heinz Buchegger schrieb:>> ../funktionsgenerator.c:48: warning: return type defaults to `int'>> ../funktionsgenerator.c: In function `ISR':>> ../funktionsgenerator.c:48: warning: type of "TIMER0_OVF_vect" defaults>> to "int">> ../funktionsgenerator.c:55: warning: control reaches end of non-void>> function>>>> was bedeuten die?>> Das die Interrupt Funktion auf deinem µC anders heißt.
Nein. Warte mal. Dann wäre der Text der Warnung ein anderer.
Bist du sicher, dass du
1
#include<avr/interrupt.h> //für interrupt
in dem Code drinnen hast, den du compilierst.
Mit sowas:
> ohh das auskommentiere habe ich versehendlich mitkopiert.
haben wir hier gar keine Freude.
Hänge das C-File an, so wie du es compilierst und kopiere nichts extra
fürs Forum. Denn dann suchen wir Fehler, die in deinem richtigen Code
nicht vorhanden sind.
Und wenn du jetzt noch verraten würdest um welchen µC es sich handelt,
dann könnte man den hier sogar im AVR-Studio mal einstellen und
nachsehen
* welche Warnungen sonst noch ignoriert wurden
* wie der ISR Handler wirklich heißen muss
Dass man den Leuten immer alles aus der Nase ziehen muss :-)
beim interrupt habe ich folgende fehlermeldungen:
../funktionsgenerator.c:53: warning: return type defaults to `int'
../funktionsgenerator.c: In function `ISR':
../funktionsgenerator.c:53: warning: type of "TIMER2_OVF_vect" defaults
to "int"
../funktionsgenerator.c:59: warning: control reaches end of non-void
function
kann mir jemand sagen, was ich da falsch gemacht habe?
ne das war es leider auch nicht. das komische ist eben, dass so alles
prima funktioniert aber sobald ich mit sei(); die interrupts aktiviere
geht gar nichts mehr :/
Marco schrieb:> ne das war es leider auch nicht.
Sind die Warnmeldungen, die Du oben gezeigt hast, jetzt weg oder nicht?
Gibt es noch weitere Compilermelduneg?
Tobias schrieb:> ../funktionsgenerator.c:52: warning: type of "TIMER2_OVF_vect" defaults
"TIMER2_OVF_vect"? Wo kommt denn das nun wieder her. Entschuldige bitte,
aber langsam wird es mir zu blöd. Zeige hier bitte exakt den Code, der
bei Dir Probleme macht.
ich hatte mir ein beispiel mit dem timer2 kopiert und wollte es damit
probieren. damit geht es aber auch leider nicht...
ich habe die aktuellen files mit der eben genannten fehlermeldung
beigefügt...
Im Funktionskopf einer C-Funktion darf zwischen Funktionsname und
Parameterliste kein Leerzeichen stehen. Das hast Du bei allen Deinen
Funktionen ,inklusive "main", nicht beachtet.
Außerdem hast Du Deine main-Funktion mit Rückgabewert "int" deklariert,
sie enthält aber kein "return" Statement.
Tobias schrieb:> aber das war der fehler leider auch nicht.> die warnungen werden immernoch angezeigt...
Ich habe jetzt mal Deine beiden Datein in ein AVR4-Studio-Projekt
eingefügt. Es kompilierte mit nur einer Warnmeldung, die besagt, dass
die Headerdatei delay.h nun unter utils/delay.h zu finden ist. Nach
Änderung dieser Zeile kompilierte das Projekt ohen Fehler- und
Warnmeldungen.
ich glaube es liegt an meiner compilerversion...das war anfangs schon so
komisch weil der den nicht von alleine gefunden hat. das delay musste
ich extra ändern, da ich noch die alte version habe. ich lade gerade den
neuen herunter...
das ist der hammer ich hing ein ganzen tag rum jetzt wegen dem mist und
nur weil meine comlierversion veraltet war :/ jetzt geht alles...aber
danke für deine bemühungen :)