Hallo, Ich stehe irgendwie auf dem Schlauch, ein Tiny13 soll über INT0 bei fallender Flanke einen IRQ auslösen aber tut es nicht. Ich muss irgendwas vergessen haben, aber ich komm nicht darauf.. Der Beispielcode soll nur ne LED einschalten wenn INT0 ausgelöst wird, tuts aber auch nicht. .include "tn13def.inc" .org 0x0000 rjmp init ; Init .org INT0addr rjmp ZeroCross ; IRQ bei Nulldurchgang init: ldi temp, 0b00000010 ; PORTB 1 Ausgang out DDRB, temp ldi temp, 1<<ISC01 | 0<<ISC00 ;INT0 falling Edge IRQ einschalten out MCUCR, temp ldi temp, 1<<INT0 out GIMSK, temp sei main: rjmp main ZeroCross: ;testmode sbi PORTB, PB1 reti ;testmode
>ldi temp, 0b00000010 ; PORTB 1 Ausgang
Ist Dir klar, dass INT0 auf PB1 liegt? Konfigurier mal PB1 als Eingang
und einen anderen Pin als Ausgang für die Test-LED. Sonst sehe ich
keinen Fehler in Deinem Prog.
LostInMusic schrieb: > Ist Dir klar, dass INT0 auf PB1 liegt? Jetzt wo du es sagst... Ich Depp. Danke dir, jetzt gehts. Aber dann hätte ich gerne noch ein anderes Problem: Ich möchte per INT0 eine Nulldurchgangserkennung realisieren. Dazu ist die AC Spannung von 24V Eff. (50Hz) über einen 47k Widerstand an INT0 angeschlossen, die andere Seite an GND, die Clampingdioden im AVR begrenzen das ganze. Klappt soweit auch ausser das sehr oft mehrere IRQs ausgelöst werden. Kann das daran liegen das die fallende Flanke (auf die ja getriggert wird) nicht steil genug ist? Wie kann man dem am besten begegnen? Meine erste Idee wäre am Ende der ISR Proforma das INTF0 Flag im GIFR zu löschen. Die ISR läuft ca. 6 µs. Oder gibt es da noch elegantere Methoden in Software?
Björn W. schrieb: > Ich möchte per INT0 eine Nulldurchgangserkennung realisieren. Weshalb nicht den Analog Comparator? Ohne Hysterese empfiehlt sich dank bekannter Frequenz ein Ausschlussfenster über Timer, sonst klapperts am Schwellwert. Also bei erkanntem Nulldurchgang INT0/AC abschalten und Timer starten. Mit Ablauf des Timers INT0/AC wieder einschalten. Eine Hysterese lässt sich aber über Ausgang und Widerstand ins Signal einkoppeln.
:
Bearbeitet durch User
(prx) A. K. schrieb: > Björn W. schrieb: >> Ich möchte per INT0 eine Nulldurchgangserkennung realisieren. > > Weshalb nicht den Analog Comparator? Den würde ich nicht nehmen, da er keine Hysterese hat. Jeder digitale Eingang hingegen hat seine Schaltschwelle bei ca. Vcc/2 mit ein paar 100 mV Hysterese. Daher wäre ein zusätzlicher Kondensator 10 - 100 nF direkt am Eingang sinnvoll, der in Verbindung mit den 47 kOhm einen Tiefpass bildet. Aha, "freiwillige Selbstkritik" ist schon erfolgt ;-)
m.n. schrieb: > Jeder digitale Eingang hingegen hat seine Schaltschwelle bei ca. Vcc/2 > mit ein paar 100 mV Hysterese. Sieht freilich nicht so aus, als ob er damit glücklich wird. Ein Tiefpass R/C oder L/C ist aber sinnvoll.
:
Bearbeitet durch User
(prx) A. K. schrieb: > Weshalb nicht den Analog Comparator? Hat der eine Hysterese? Da konnt ich im Datenblatt nichts zu finden. Ansonsten würde es da ja genauso "Klappern" nur auf einem wählbaren Level. Aber die Sache mit dem Timer gefällt mir. Werd ich ausprobieren.
m.n. schrieb: > Daher wäre ein zusätzlicher Kondensator > 10 - 100 nF direkt am Eingang sinnvoll, der in Verbindung mit den 47 > kOhm einen Tiefpass bildet. Ähm, macht denn das die eh schon zu langsame Flanke nicht noch langsamer?
Björn W. schrieb: > Hat der eine Hysterese? Nein. Aber wenn man mit dem AC-Interrupt einen Ausgang schaltet, kann man den per Widerstand in den AC-Eingang einkoppeln und damit eine Hysterese erzeugen.
Björn W. schrieb: > Ähm, macht denn das die eh schon zu langsame Flanke nicht noch > langsamer? Wie beschrieben haben die normalen Eingänge Schmitt-Trigger Eigenschaft, sind somit nicht von der Flankensteilheit beeinflusst. Allerdings ist das Stromnetz selten ein perfekter Sinus.
Björn W. schrieb: > Hat der eine Hysterese? Ja, aber eine sehr kleine. > Da konnt ich im Datenblatt nichts zu finden. Nun, worauf man sich im DB nicht festlegt, braucht man auch nicht zu garantieren ;o) Sprich: das schwankt exemplarabhängig ganz erheblich. > Ansonsten würde es da ja genauso "Klappern" nur auf einem wählbaren > Level. Eine Hysterese ist eher etwas, was dem "Klappern" entgegenwirkt. Sprich: Wenn's schon an einem digitalen Eingang klappert, klappert's an einem AC-Eingang noch sehr viel mehr. Allerdings haben die einen zuschaltbaren digitalen "Tiefpaß", der eventuell nützlich sein könnte. Was aber auf jeden Fall helfen würde, wäre ein externer Tiefpaß in Hardware.
Björn W. schrieb: > Klappt soweit auch ausser das sehr oft mehrere IRQs ausgelöst werden. > Kann das daran liegen das die fallende Flanke (auf die ja getriggert > wird) nicht steil genug ist? den Int nach dem ersten ausloesen erst nach einer zeit X (z.B. 5 ms) wieder freigeben z.B. ueber einen int eines Timer's VlG Charly
Björn W. schrieb: > die Clampingdioden im > AVR begrenzen das ganze. Iiiiihhhh! 24V eff. haben fast 34V Spitze. Und auch noch die clamping-Dioden missbrauchen! Wenn der 50-Hz-Sinus kleine Impulse im Bereich des Nulldurchgangs enthält, spricht der Kontroller darauf an. Abgesehen davon: über 47k auf die clampingdioden zu gehen ergibt eine deutlich unsymmetrische Begrenzung und damit Verschiebung des Nulldurchgangs. etwas sauberere Lösung: erstmal mit Vorwiderstand und zwei externen Dioden (ist ja ein einzelnes Dreibein-IC) auf (Vcc + 0,7V) und -0,7 V begrenzen und dann mit einem Kondensator an den Eingang, der mit zwei Widerständen auf Vcc/2 gebracht ist.
:
Bearbeitet durch User
c-hater schrieb: > Björn W. schrieb: > >> Hat der eine Hysterese? > > Ja, aber eine sehr kleine. > >> Da konnt ich im Datenblatt nichts zu finden. Das steht im Datenblatt unter "typische Eigenschaften". > Nun, worauf man sich im DB nicht festlegt, braucht man auch nicht zu > garantieren ;o) > > Sprich: das schwankt exemplarabhängig ganz erheblich. Die Schwankungen sind minimal und somit völlig bedeutungslos. Charly B. schrieb: > den Int nach dem ersten ausloesen erst nach einer zeit X (z.B. 5 ms) > wieder freigeben z.B. ueber einen int eines Timer's Einen Timer muß man nicht verwenden. In Verbindung mit ext. Tiefpass und etwas Software, lassen sich Totzeit und große Hysterese realisieren: Beitrag "Re: EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä." Die ISR kann man auch einfach in Assembler umschreiben.
m.n. schrieb: > Das steht im Datenblatt unter "typische Eigenschaften". Ist das tatsächlich so? Dann sollte es dir ja nicht schwer fallen, einfach mal ein Beispiel aus irgendeinem DB zu zeigen. Ich erwarte es sehr gespannt...
hast du nicht ein paar Bytes im Flash übrig um die Interrupt-Einsprungtabelle vollständig anzugeben? Dürfte ein späteres erweitern viel leichter machen.
1 | .org 0x000 |
2 | rjmp RESET ; Reset Handler |
3 | reti; rjmp EXT_INT0 ; IRQ0 Handler |
4 | rjmp PCINT0 ; PCINT0 Handler |
5 | reti; rjmp TIM0_OVF ; Timer0 Overflow Handler |
6 | reti; rjmp EE_RDY ; EEPROM Ready Handler |
7 | reti; rjmp ANA_COMP ; Analog Comparator Handler |
8 | reti; rjmp TIM0_COMPA ; Timer0 CompareA Handler |
9 | reti; rjmp TIM0_COMPB ; Timer0 CompareB Handler |
10 | reti; rjmp WATCHDOG ; Watchdog Interrupt Handler |
11 | reti; rjmp ADC ; ADC Conversion Handler |
12 | |
13 | Reset: ; Main program start |
14 | ldi r16, low(RAMEND); Set Stack Pointer to top of RAM |
15 | out SPL,r16 |
16 | sei ; Enable interrupts |
https://www.microchip.com/content/dam/mchp/documents/OTH/ApplicationNotes/ApplicationNotes/Atmel-2508-Zero-Cross-Detector_ApplicationNote_AVR182.pdf Man kann das auch mit einen AC Optokoppler machen, bei den Widerständen gilt es auf die maximale Spannung zu achten, da viele nur bis 100V zugelassen sind.
:
Bearbeitet durch User
c-hater schrieb: > Dann sollte es dir ja nicht schwer fallen, > einfach mal ein Beispiel aus irgendeinem DB zu zeigen. Wenn Du schon so lieb fragst, dann nehme ich mal den ATtiny417. Thomas O. schrieb: > Man kann das auch mit einen AC Optokoppler machen, bei den Widerständen > gilt es auf die maximale Spannung zu achten, da viele nur bis 100V > zugelassen sind. Ich bin mir garnicht sicher, ob der TO tatsächlich den (exakten) Nulldurchgang braucht, oder nur ein Signal synchron zur Netzfrequenz. Bei 24 Veff müssen keine speziellen Widerstände verwendet werden. Björn W. schrieb: > Oder gibt es da noch elegantere Methoden in Software? Das Signal abzuschwächen und per ADC einzulesen geht natürlich immer. Per Software lassen sich die Grundfrequenz filtern sowie Maximum, Minimum und Nulldurchgänge ermitteln.
m.n. schrieb: . . . > Charly B. schrieb: >> den Int nach dem ersten ausloesen erst nach einer zeit X (z.B. 5 ms) >> wieder freigeben z.B. ueber einen int eines Timer's > > Einen Timer muß man nicht verwenden. In Verbindung mit ext. Tiefpass und > etwas Software, lassen sich Totzeit und große Hysterese realisieren: > Beitrag "Re: EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä." > Die ISR kann man auch einfach in Assembler umschreiben. sicher, alle Wege fuehren nach Rom, auch die ueber Moskau oder Peking...
Charly B. schrieb: > sicher, alle Wege fuehren nach Rom, auch die ueber Moskau > oder Peking... Wieso Rom? Mussolini ist doch schon länger tot.
m.n. schrieb: > Ich bin mir garnicht sicher, ob der TO tatsächlich den (exakten) > Nulldurchgang braucht Doch, brauch ich. Das Ganze soll am Ende eine Wellenpaketsteuerung für meine Lötstation werden. Die Vergess ich ständig auszuschalten wenn sie nicht gebraucht wird... Die Station soll nach Einschalten für 30 Minuten auf 100% laufen und dann für 30 Minuten auf 15% der Leistung laufen. Danach soll sie abschalten. Der ganze Vorgang kann jederzeit per Taster retriggert werden.
Schöne Bastelei! Hoffentlich kommt jetzt nicht die Frage, wie du die Wartezeit von 30s programmierst :-) Viel Spass und Gruß, Rainer
Björn W. schrieb: > Der ganze Vorgang kann jederzeit per Taster retriggert werden. Warum nicht durch Aktivität des Lötkolben (über Wärmeverlust beim Löten) oder Aktivität des Nutzers (Bewegungssensor) ?
Hi, also für deine Wps reicht tätsächlich ein Tiefpass. Ob da eine Halbwelle mehr oder weniger ist, hat kaum Wirkung. Für einen sauberen Phasenanschnitt ist sowas aber ungünstig. Der ACO geht da aber wirklich recht gut weil minimale Filterwirkungen (4 Takte Verzögerung) schon eingebaut sind. Wenn dann noch für 9,5ms der Int. verhindert wird geht das ganze sehr zuverlässig. Die beiden Eingänge bekommen 2 Dioden als Überspannungsschutz. Die Ref.diode ist eine mit 0,2V Uf und die am Eingang eine mit 0,5V Uf. Mach was du für richtig befindest Vorschläge gab es genug. Viel Erfolg, Uwe
Rainer V. schrieb: > Hoffentlich kommt jetzt nicht die Frage, wie du die > Wartezeit von 30s programmierst :-) Wenn man schon Nulldurchgänge erfasst, und die kommen noch von der stabilen Netzfrequenz.. Da könnte man ja auf die Idee kommen die zu zählen ;)
Jimi H. schrieb: > Warum nicht durch Aktivität des Lötkolben (über Wärmeverlust beim Löten) > oder Aktivität des Nutzers (Bewegungssensor) ? Weil ich das alles für Unzuverlässig halte.
m.n. schrieb: > Wenn Du schon so lieb fragst, dann nehme ich mal den ATtiny417. Du schummelst. Der ist XMega-Erbe. Es ging aber um die klassischen AVR8, da der Tiny13 (Thema dieses Threads) eben einfach mal zu diesen gehört. Und da wirst du nix dazu finden.
c-hater schrieb: > Du schummelst. Der ist XMega-Erbe. Schon vergessen? Du wolltest irgendeinen ATtiny und den habe ich Dir gezeigt. > Es ging aber um die klassischen AVR8, da der Tiny13 (Thema dieses > Threads) eben einfach mal zu diesen gehört. Und da wirst du nix dazu > finden. Ich hatte es bereits gefunden; es steht ja in jedem Datenblatt.
Funktioniert Zufriedenstellend. Die gelbe Linie ist die Trafospannung und die türkise Linie ist die Sapnnung am Lötkolben bei 15% Leistung.
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.