> Bei Attiny261 wird Interrupt TIMER1_COMPA nicht aufgerufen> Beim Attiny261 bekomme ich keine ISR (TIMER1_OVF_vect) aufgerufen
Kannst du dich für ein Problem entscheiden, oder funktionieren beide
Interrupts nicht?
cli() und sei() haben normalerweise in ISR nicht verloren. Hast du einen
guten Grund, das zu machen?
> wo finde ich den int main(void) {} Block?
Gute Frage!
thomas schrieb:> Bitte entschuldigt manch falsche Komentare im Code - er ist eben kopiert> und abgeändert - ich will erst mal nur den verd... Iterrupt aufgerufen> bekommen. den Rest schaffe ich hoffentlich wieder alleine.
Ja, dann mach das doch.
Schmeiss alles, was mit diesem Interrupt nichts zu tun hat, raus. Und
wenn es dann läuft, setzt du alles andere Schritt für Schritt wieder
rein.
Und beachte die Warnings des Compilers.
Hallo,
Dabla:
"Interrupt vectors of ATtiny261A/461A/861A are described in Table 9-1
below."
http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html
Du solltest genau diejenigen Namen eintragen, die Dein Compiler kennt.
Dann noch in Timsk einzeln frei geben. Sei ();
MfG
> Du solltest genau diejenigen Namen eintragen, die Dein Compiler kennt.
hat er doch!
> Dann noch in Timsk einzeln frei geben
hat er auch
> Sei ()
ist auch im Code
Sag mal, liest du eigentlich die Frage, bevor du sie beantwortest? oder
arbeitest du mit Textbausteinen, wie der Support von Ebay?
Stefan U. schrieb:> Sag mal, liest du eigentlich die Frage, bevor du sie beantwortest?
Weil die Frage schlichtweg unlesbar ist.
Keine Forenregeln eingehalten, d.h. nicht als Anhang gepostet oder
wenigstens Codetags verwendet. Und dann noch nen riesen Wust an Code
drin, der mit T1 absolut nichts am Hut hat.
Was mit schonmal bitter aufstößt, sind die Delays im Interrupt.
Bist du ganz sicher, dass die Interrupts nicht aufgerufen werden?
Vielleicht hast du die LED's falsch herum angeschlossen oder bist
einfach nicht imstande, das kurze 5ms Blitzen zu sehen.
Stefan U. schrieb:> Bist du ganz sicher, dass die Interrupts nicht aufgerufen werden?
Wie soll das ohne "(Main-)Schleife" gehen? Es wird initialisiert und das
Programm ist dann zu Ende. (Punkt)
> Wie soll das ohne "(Main-)Schleife" gehen?
Wegen der Timer Interrupts!
Ich bin davon ausgegangen, dass eine main() Funktion schon vorhanden
ist, aber dass der TO annahm, sie wäre für die Klärung des Problem nicht
relevant.
Stefan U. schrieb:> Ich bin davon ausgegangen, dass eine main() Funktion schon vorhanden> ist, aber dass der TO annahm, sie wäre für die Klärung des Problem nicht> relevant.
Natürlich hat er die. Sonst lässt der Compiler das ja auch nicht durch.
Und da ist auch irgendwo der Fehler. Der Fehler ist immer da, wo jemand
meint, daß er da garantiert nicht sein könnte.
Viel schlimmer finde ich allerdings, daß er seinen Rotz hier reinstellt
und sich dann nicht wieder meldet. Womöglich beschwert er sich heute
abend noch, daß keine fertige Lösung vorliegt.
"Viel schlimmer finde ich allerdings, daß er seinen Rotz hier reinstellt
und sich dann nicht wieder meldet. "
Mindestens ein Dankeschön würde man doch erwarten können, oder?
Erstmal ist Wochenend-Tralala...
MfG
Hi! Hier ist der Autor der Frage.
Ich bin über die vielen Einträge und Helfer überwältigt! Wollte mich
schon mal bedanken - auch wenn der entscheidente Hinweis noch nicht
dabei war.
Verstehen kann ich manch Komentare nicht - gerade die, die um Mtternacht
geschrieben wurden. Ich habe eben andere Arbeitszeiten - und kann wegen
Familie nicht immer und sofort Antworten.
Dass das Main komplett fehlt war mir nicht aufgefallen. Wie man einen
Quelltext RICHTIG reinstellt, konnte ich in meiner ERSTEN Frage nicht
aneignen.
Der Interrupt (TIMER1_OVF_vect) wird doch nach einem Test, den ich nach
der Beerdigung eines langjährigen Arbeitskolleken durchgeführt habe,
aufgerufen - so viel zum Thema ein wenig mehr GEDULT, Bitte!
Der Interrupt ISR (TIMER1_COMPA_vect) wird nach einem weiteren Test GAR
nicht aufgerufen.
Das mit dem Sperren und freigeben des i-Interrupts habe ich irgendwo
aufgenommen und fand es jetzt nicht fehlerhaft. Sicher ist sicher eben.
Aktuell habe ich es so:
________________________________________________________________________
ISR (TIMER1_COMPA_vect)
{
cli();
LED |= (1<<LED_blau);
//Pieper Steuern
PAR.WECKER = wach; //Zeit abgelaufen Wecker aktivieren
sei();
}
ISR (TIMER1_OVF_vect)
{
LED ^= (1<<LED_rot);
}
ISR (ADC_vect)
{
cli();
PAR.ADC_STATUS = fertig; //ADC Messung abrufbar
sei();
}
//----------------------------------------------------------------------
------
int main(void)
{
init();
//Hauptprogramm
while(1)
{
if (PAR.WECKER=wach)
{ OCR1A = OCR1A + W_Zeitbasis; //Neuen Aufwecktermin
übergeben
PAR.WECKER=schlaf; //wieder schlafen legen
}
/*//ADC: Wenn frei, dann Messung loslegen
if (PAR.ADC_STATUS=frei)
{ ADCSRA |= (1<<ADSC); //Messung starten
PAR.ADC_STATUS=misst; //Messung läuft
}
if (PAR.ADC_STATUS=fertig)
{ R_unten=ADC; //Messung in das richtige Register
sichern
}
*/
}
}
_______________________________________________________________________
UND hier ist die Main auch dabei - aber das ganze einrichten nicht.
JETZT bin ich mal am Hobbyplatz und ansprechbar - falls weitere
Kontruktive Fragen gestellt werden.
Manch Sachen, die nicht unbedingt nötig sind sind eben noch im Programm
drin, werden aber später benötigt. Diese stören jedoch nicht das
aufrufen, denn das Interrupt ISR (TIMER1_OVF_vect) kann ja aufgerufen
werden.
Gruß Thomas
thomas schrieb:> JETZT bin ich mal am Hobbyplatz und ansprechbar - falls weitere> Kontruktive Fragen gestellt werden.
Sourcecode in [c] Tags einklammern, siehe
---> Wichtige Regeln - erst lesen, dann posten!
Peter D. schrieb:> Keine Forenregeln eingehalten, d.h. nicht als Anhang gepostet oder> wenigstens Codetags verwendet.
Solche Hinweise ignorierst du einfach?
Aktuell habe ich die blaue LED im Main eingeschaltet - diese leuchtet.
Danke des Hinweisen, wie man den Code einstellt.
Hatte ich noch nicht gelesen - manch Komentare überlese ich eben.
Soll ich nochmal den kompkletten Conde in diesen Klammern einstellen?
Habe auch angefangen unwichtiges zu entfernen - wie z.B. das mit den
I-Interrupt.
thomas schrieb:> Aktuell habe ich es so:
Ne, das compiliert nicht.
Gehe mal zurück auf Start:
Hänge das Projekt als Anhang an. Entweder das *.c oder als *.zip, wenn
es mehrere Dateien sind.
Und schmeiß den ganzen ADC-Krempel raus, der interessiert hier
niemanden. Dann weißt Du auch, ob der Fehler nicht im ADC-Krempel liegt.
D.h. Du prüfst selbstverständlich vor dem Posten, ob der Fehler im
gekürzten Code immer noch auftritt und ob der überhaupt compiliert.
Das Gespräch jetzt hatte sehr viel gebracht.
Vor einigen Tagen: Ich war eben am verzweifeln. (Post) Hatte sonst ( Bei
anderen Projekten) mich durchgekämpft.
Das mit dem einstellen kann ich gerne jetzt noch machen, jedoch habe ich
den Fehler gefunden. Eine einfache LEERSTELLE nach einem "=" hatte das
ganze ausgemacht.
Hatte auch den Code ausgespeckt und siehe da, der Kompiler hatte eine
Anmerkung, mit der ich nichts anfangen konnte nicht mehr aufgerufen.
Ich hatte gedacht, dass nur "rote" Fehler vom Compiler richtig wichtig
sind.
Danke des netten Gespräches - und das mit den ForenRegeln hatte ich
wegen Zeitmangel nicht gelesen, da nicht gefunden. Hatte nicht gedacht,
dass es so schlimm im Browser dargestellt wird, dass alles verzerrt ist.
Man lernt nie aus - beim nächsten mal besser und überlegter.
thomas schrieb:> der Kompiler hatte eine> Anmerkung
Damit qualifizierst Du Dich als fortgeschrittener Frager, wenn Du solche
Meldungen gleich am Anfang per Copy&Paste mitteilst. Und wenn dann noch
der Code als Anhang ist, kann man sogar die Zeilennummer der Meldung
richtig zuordnen. Das erspart uns nen gewaltigen Haufen Sucherei und
Hellsehen.
thomas schrieb:> if (PAR.WECKER=wach)thomas schrieb:> if (PAR.ADC_STATUS=frei)
Das willst du aber nicht wirklich, oder?
Du willst vergleichen, weist aber zu.
Ich kann es nun gut verstehen, weswegen direkt unmut zu lesen war.
(Einsichtig!)
Kannst du mir noch vielleicht einen Tip geben, was sich unter dem
Register (Und Bit) versteckt?
TCCR1A | = (1<<PWM1A) Datenblatt S.114
Ich kann das Englisch nicht so sehr...
Würde ich damit den einfachen PWM beim Controller am PIN einschalten?
@ Hin Weisa:
Schit! Dass letzte Programmieren ist mehr als ein Jahr zurück!
Danke! Anfängerfehler... Wird gleich mit "==" berichtigt!
Wow ihr nehmt euch richtig Zeit - so macht Programmieren gleich mehr
Spaß!
"TCCR1A | = (1<<PWM1A) "
Hallo,
Dieses Bit schaltet den Fast-PWM-modus für den Pin OC1A ein und wirkt
zusammen mit den Bits COM1AX. Was genau passiert, ist in den
umfangreichen Tabellen aufgeführt. Man kann die Einstellungen auch alle
durchprobieren und mittels Oszilloskop beobachten, was passiert.
"The fast Pulse Width Modulation or fast PWM mode (PWM1A/PWM1B = 1 and
WGM1[1:0] = 00) provides a high frequency PWM waveform generation
option. The fast PWM differs from the other PWM option by its
single-slope operation. The counter counts from BOTTOM to TOP (defined
as OCR1C) then restarts from BOTTOM."
Im Vergleich zum normalen PWM-modus dauert der Zyklus nur halb so lange,
weil der Zähler nur von Null bis OCR1C-Wert hoch zählt.
MfG