Sprunghilfe

Antworten
Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Sprunghilfe

Beitrag von Maik81SE »

Moin zusammen,

Kann mir jemand bezüglich der Interrupts auf das Sprungbrett helfen, bevor ich mich tiefer reinknie?

wenn ich das Tutorial richtig lese wird die Procedure

Code: Alles auswählen

procedure PC_Int1_Interrupt; public Name 'PCINT1_ISR'; interrupt;
ausgelöst, sowie einer der beiden Ports des ATMega328 eine Pegeländerung aufweist.

Wäre dahingehend eine analogie beim ATtiny25 mit dem Aufruf

Code: Alles auswählen

procedure PC_INT3_Interrupt; public name 'PCINT3_ISR'; interrupt;
begin
  // Drehgeber Kanal A Auswertung ( inc (fkt -A-/-B-))
end;

procedure PC_INT4_Interrupt; public name 'PCINT4_ISR'; interrupt;
begin
  //  Drehgeber Kanal B Auswertung
end;

procedure PC_INT5_Interrupt; public name 'PCINT5_ISR'; interrupt;
begin
  //Auswertung des Funktions Tasters A (fkt -A- @ PB5 = 'H' / -B- @ PB5 = 'L')
end;
korrekt oder würden diese bei einem Tastendruck erst gar nicht aufgerufen werden.

würde ungern die Auswertung in die Hauptschleife werfen.

ferner bin ich am Überlegen, ob es Sinnvoll ist, den AVR in de Sleep und seine Interne Taktfrequenz auf ein Minimum zu werfen, sowie er seinen Interrupt abgearbeitet hat.

Leider noch kein ATtiny25 zu hause, sonst würde ich es einfach testen.

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Sprunghilfe

Beitrag von Mathias »

Das Tutorial gibt es auch in Deutsch: https://wiki.freepascal.org/AVR_Embedde ... terrupt/de

Das mit PCINT4_ISR und PCINT5_ISR funktioniert sowieso nicht, der Attiny25 kennt nur PCINT0_ISR, siehe in den Sourcen von Attny25.pp.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Re: Sprunghilfe

Beitrag von Maik81SE »

:) da kann ich mich ja auf die Auswertung werfen, nachdem dies bestätigt / entkräftet wurde.

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Sprunghilfe

Beitrag von Timm Thaler »

1. Du mußt natürlich die Interrupts beim Start einschalten.
2. Es ist zwar weit verbreitet, aber eine Unsitte Encoder oder Tasten im Interrupt abzufragen. Wenn der Encoder wackelt wird ständig der Interrupt ausgelöst und das Programm verzögert. Tastenprellen löst auch den Interrupt mehrfach aus.

Da Encoder-Abfragen eher "langsam" sind, macht man das besser so:
- Timer einrichten 1-4msec oder so
- im Timer-Interrupt Tasten einlesen und entprellen, Tasten bzw. Encoderwerte in Variable
- in Hauptprogramm abfragen, ob Tasten gedrückt oder Encoder verändert und entsprechend auswerten

Etwas anderes ist, wenn Du den AVR mit einem Pin Change aus dem PowerDown holen willst. Dann würde ich das aber auch so machen: Im Interrupt nur aufwecken, Tastenstatus und Entprellen mit Timer. Gerade Entprellen funktioniert mit Timer sehr zuverlässig.

Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Re: Sprunghilfe

Beitrag von Maik81SE »

Timm Thaler hat geschrieben:
So 3. Jan 2021, 23:43
Da Encoder-Abfragen eher "langsam" sind, macht man das besser so:
- Timer einrichten 1-4msec oder so
- im Timer-Interrupt Tasten einlesen und entprellen, Tasten bzw. Encoderwerte in Variable
- in Hauptprogramm abfragen, ob Tasten gedrückt oder Encoder verändert und entsprechend auswerten
Das würde Option B entsprechen.
Timm Thaler hat geschrieben:
So 3. Jan 2021, 23:43
Etwas anderes ist, wenn Du den AVR mit einem Pin Change aus dem PowerDown holen willst. Dann würde ich das aber auch so machen: Im Interrupt nur aufwecken, Tastenstatus und Entprellen mit Timer. Gerade Entprellen funktioniert mit Timer sehr zuverlässig.
Das ich auch der Weg, welchen ich gehen würde, da der µC sonst nur sinnlos die Main ablaufen würde. Kann man machen, muß man aber nicht. Wird wohl dann auch so enden, das diese Variante weniger Flash braucht. und 2K Sind beim ATtiny25 nicht viel. :|

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Sprunghilfe

Beitrag von Timm Thaler »

Maik81SE hat geschrieben:
Mo 4. Jan 2021, 13:54
Das ich auch der Weg, welchen ich gehen würde, da der µC sonst nur sinnlos die Main ablaufen würde. Kann man machen, muß man aber nicht. Wird wohl dann auch so enden, das diese Variante weniger Flash braucht. und 2K Sind beim ATtiny25 nicht viel. :|
Wenn man Entprellung und PowerDown kombinieren möchte, würde ich das so machen.

Schlafen legen:
Interrupt auf PinChange
Sleep => PowerDown

im Interrupt:
PinChange Interrupt aus
Prellcounter reset
Idlecounter reset

im Main, Timergesteuert:
alle 4msec Tasten pollen
entprellen
auf Tasten reagieren
solange Tasten aktiv Idlecounter reset
sonst Inc Idlecounter
wenn Idlecounter > 250 wieder schlafen legen

Hängt aber natürlich davon ab, was der AVR mit dem Tastendruck machen soll.

Benutzeravatar
Maik81SE
Beiträge: 308
Registriert: Fr 30. Sep 2011, 14:07
OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
CPU-Target: x86-64; arm; avr
Wohnort: Lübeck
Kontaktdaten:

Re: Sprunghilfe

Beitrag von Maik81SE »

im Grunde soll mir der Interrupt nur einen Kommunikations befehl erzeugen, welcher via auf dem übergeordneten µC ausgewertet und verarbeitet wird.

Kernprogramm steht auch schon, nun suche ich zusätzlich einen einfach anzuwendenen AVR-SIM Online/offline aus der repo.
simavr gibt mir aber nicht das, was ich gerne sehen würde (register/ports/ usw)

Code: Alles auswählen

label.caption:= 'gnublin.no-ip.info'
Debian 12 (L 3.0.0.3 FPC 3.2.2);
windows 10 (L 3.99.0.0 FPC 3.2.0)

Antworten