Guten Abend, Wir (Techniker Projektgruppe) programmieren gerade eine Platinen Fräse. Nun stehen wir gerade vor einem Problem: Wir benutzen 2 Timer Interrupts im Programm um gerber daten von der SD Karte einzulesen(Timer1) und möchten jetzt noch einen Timer benutzen um unsere Geber (Timer 0) einzulesen. Wenn wir beide Timer mit TIMSK aktivieren stehen beide irgendwie im Konflikt und funktionieren nicht. Wenn wir die Timer einzeln aktivieren funktioniert sie beide ohne Probleme. Danke schonmal für eure Hilfe. PS:Der Programmcode ist im Anhang
> Wir benutzen 2 Timer Interrupts im Programm um gerber daten von der SD > Karte einzulesen(Timer1) und möchten jetzt noch einen Timer benutzen um > unsere Geber (Timer 0) einzulesen. SD-Kartenzugriffe ∗in∗ der ISR? Der angehängte Code sieht sauber unvollständig aus, sonst würd ichs selber prüfen. Zumindest in der Main passiert nicht das, was passieren sollte. Also passierts vermutlich in der ISR. > Wenn wir die Timer einzeln aktivieren funktioniert sie beide ohne > Probleme. Das sieht nur so aus.
>PS:Der Programmcode ist im Anhang
Das kann nicht der Code sein den du verwendest.
Der geht so durch keinen Compiler.
Hi >Wir benutzen 2 Timer Interrupts im Programm um gerber daten von der SD >Karte einzulesen(Timer1) und möchten jetzt noch einen Timer benutzen um >unsere Geber (Timer 0) einzulesen. Nein, ihr benutzt nur einen: TIMSK=1<<TOIE0; TIMSK=1<<TOIE1; Und das ganze Register=0 könnt ihr euch sparen. Das macht der Controller beim Reset automatisch. MfG Spess
Thomas Eckmann schrieb: > Atmega103-Fuse. > > mfg. Erstmal danke für die Antwort, aber wie bekommen wir mit code vision avr das 103c fuse gesetzt bzw. nicht gesetzt. mfg
Markus Sch schrieb: > Thomas Eckmann schrieb: >> Atmega103-Fuse. >> >> mfg. > > > Erstmal danke für die Antwort, aber wie bekommen wir mit code vision avr > das 103c fuse gesetzt bzw. nicht gesetzt. Fuses setzen bzw. löschen ist eine Tätigkeit, die dein Brennprogramm unterstützt. D.h. du musst in dem Programm nachsehen, mit dem du deine Ergüsse in den µC brennst. Dabei: Fuses auslesen Wenn das Brennprogramm die Bits nicht aufschlüsselt, dann benutze den Fuse-Calculator http://www.engbedded.com/fusecalc um sie zu identifizieren. Dann verschaff dir einen Überblick, indem du zb die ausgelesenen Fuses mit den im Datenblatt angegebenen Default-Werten vergleichst Die Fuses setzen, die du gesetzt haben willst und brennen. Bei den Fuses sind die Fuses über die Taktversorgung kritisch. Wenn du die falsch setzt, dann sperrst du dich aus dem µC aus. Daher: die unbedingt in Ruhe lassen, solange du daran nicht rumfummeln musst. Und daher solltest du auch immer die Fuses erst mal auselesen, damit du tatsächlich und wirklich nur die Fuses umstellst, die umgestellt werden sollen. Aber so wie es aussieht, steht die M103-Fuse ohnehin korrekt. Eine falsche Einstellung würde zu dem Symptom führen, dass der µC beim Return vom ersten Funktionsaufruf abstürzt. Und den Fall habt ihr ja nicht.
Allerdings solltet ihr auf diesen Code-Wizard verzichten, bzw. das was der euch generiert hat aufarbeiten. Der COde ist extrem in die Länge gezogen und daurch extrem unübersichtlich. Damit ist euch auch entgangen, dass TIMSK falsch benutzt wird und das zweite Bit-Setzen die erste Einstellung wieder löscht. Diese anfängliche Registersetzorgie (selbst von Dingen die im Programm gar nicht vorkommen), ist einfach nur unübersichtlich und schwer zu warten.
Karl Heinz Buchegger schrieb: > Allerdings solltet ihr auf diesen Code-Wizard verzichten, bzw. das was > der euch generiert hat aufarbeiten. > > Der COde ist extrem in die Länge gezogen und daurch extrem > unübersichtlich. Damit ist euch auch entgangen, dass TIMSK falsch > benutzt wird und das zweite Bit-Setzen die erste Einstellung wieder > löscht. > Diese anfängliche Registersetzorgie (selbst von Dingen die im Programm > gar nicht vorkommen), ist einfach nur unübersichtlich und schwer zu > warten. Hallo Karl Heinz du hast recht das der Timer 0 interuppt dadurch nicht funktioniert. Nur blicken wir momentan nicht durch wie wir das Problem beseitigen und wo der Timer zurück gesetzt wird? mfg
Hi Habe ich doch schon hier: Beitrag "Re: Timer Probleme ATMEGA128" geschrieben. Mit der zweiten Anweisung wird die erste Einstellung überschrieben. MfG Spess
Hallo, ich habe noch eine Verständnis Frage, im Code wird keine der AVR Headerdateien geladen. Bei avr-gcc also so etwas:
1 | // avr gcc include
|
2 | #include <avr/io.h> |
3 | #include <avr/interrupt.h> |
4 | #include <avr/pgmspace.h> |
5 | #include <avr/wdt.h> |
6 | |
7 | // std c include
|
8 | #include <stdint.h> |
9 | #include <stdlib.h> |
10 | // :
|
Wie ist das Bei deinem Paket ?
Uwe S. schrieb: > Hallo, > > ich habe noch eine Verständnis Frage, im Code wird keine der AVR > Headerdateien geladen. Der Code ist ganz offensichtlich nicht vollständig gepostet. Es gibt ja zb auch kein
1 | int main() |
2 | {
|
3 | ...
|
obwohl es das ja offensichtlich geben MUSS.
Uwe S. schrieb: > Hallo, > > ich habe noch eine Verständnis Frage, im Code wird keine der AVR > Headerdateien geladen. > > Bei avr-gcc also so etwas:// avr gcc include > #include <avr/io.h> > #include <avr/interrupt.h> > #include <avr/pgmspace.h> > #include <avr/wdt.h> > > // std c include > #include <stdint.h> > #include <stdlib.h> > // : > > Wie ist das Bei deinem Paket ? Hi Uwe der Programmcode ist nur die Initialisierung der Timer. Den Rest habe ich weggelassen. Denn in diesem Teil werden die Timer gestartet bzw. die Interrupts. mfg
Markus Sch schrieb: > Nur blicken wir momentan nicht durch wie wir das Problem beseitigen und > wo der Timer zurück gesetzt wird? Ich würd mal hergehen und alles rauswerfen, was im Projekt nicht gebraucht wird (zumindest jetzt noch nicht) Kommt ein ADC vor? Nein! Dann weg damit Kommt ein Timer 2 vor? Nein! Dann weg damit etc. etc. Und diese ganze ZUweisungen von Hex-Zahlen an die Konfigurationsregister. Mir ist bis heute rätselhaft, warum Codevision das so macht. Auf der einen Seite generieren sie da Kommentare, welche Einstellung realisiert wird (was grundsätzlich eine gute Sache ist), auf der anderen Seite generieren sie den (fast) schlechtest möglich lesbaren Code dafür. Und den dann auch noch in die Länge gezogen. Aufräumen! Oder den Code noch mal neu, aber diesmal leselich(!) schreiben! ja das geht. Die ganze Initialisierung lässt sich in ca. 10 Zeilen ausdrücken anstatt sich über 3 Seiten hinzuziehen. Und dann verliert man auch nicht den Überblick, welche Komponenten mit welcher Konfiguration aktiviert wurden und welche nicht. Und wie man einzelne Bits in einem Register gezielt auf 1 setzt, brauchen wir uns ja hoffentlich bei einer Abschlussarbeit nicht mehr unterhalten.
Hallo zusammen, nein das ist natürlich nicht der vollständige Code, Da fehlen auch noch diverse Funktionen usw... die header haben wir natürlich auch drin.Das ganze Programm läuft ja abgesehen von dem zweiten Timer. Der fehlende Teil sollte aber nichts mit der Timerproblematik zu tun haben Gruß Björn
Karl Heinz Buchegger schrieb: > Markus Sch schrieb: > >> Nur blicken wir momentan nicht durch wie wir das Problem beseitigen und >> wo der Timer zurück gesetzt wird? > > Ich würd mal hergehen und alles rauswerfen, was im Projekt nicht > gebraucht wird (zumindest jetzt noch nicht) > > Kommt ein ADC vor? > Nein! > Dann weg damit > > Kommt ein Timer 2 vor? > Nein! > Dann weg damit > ........................ > > > Und wie man einzelne Bits in einem Register gezielt auf 1 setzt, > brauchen wir uns ja hoffentlich bei einer Abschlussarbeit nicht mehr > unterhalten. Dann werden wir das mal tun. TIMSK0=0b00000001
Schabbi schrieb: >> Und wie man einzelne Bits in einem Register gezielt auf 1 setzt, >> brauchen wir uns ja hoffentlich bei einer Abschlussarbeit nicht mehr >> unterhalten. > > > Dann werden wir das mal tun. > TIMSK0=0b00000001 Es ging eher um den Unterschied von TIMSK=1<<TOIE1; und TIMSK|=1<<TOIE1;
Karl Heinz Buchegger schrieb: > TIMSK|=1<<TOIE1; Ok das ist die schreibweise um das bit anzusprechen.(Und natürlich übersichtlicher da man nicht im datenblatt nachschauen muss was bei welchem bit passiert). aber was hat es mit dem querstrich auf sich? TIMSK|=1<<TOIE1;
Schabbi schrieb: > aber was hat es mit dem querstrich auf sich? > > TIMSK|=1<<TOIE1; das steht in jedem C buch ...
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.