Pin change interrupts

Arduino specifieke Software
Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Pin change interrupts

Berichtdoor Gij Kieken » 08 Jan 2017, 21:46

Voor een uitbreiding op een bestaand projectje waarbij ik gebruik maak van external INT0 en INT1 op een Arduino Nano (Atmega 328),
om twee sensors te loggen wil ik nu graag een derde parameter interrupt gestuurd kunnen loggen.
Ik heb natuurlijk al weest zoeken bij Arduino.cc e.d. meer naar info.
De vraag is wie kan er mij een link naar een Pdf, tutorial of titel van boek(voor beginners) geven liefst in de nederlandse taal over Pin_Change_Interrupts ?
Dit om mij wat te kunnen verdiepen in het werken met registers e.d.
(Multi-tasking the Arduino https://learn.adafruit.com...)vind ik voor mij begrijpbare taal hier wordt de State-Machine behandelt.

Alle info en tips en trics zijn welkom,

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Pin change interrupts

Berichtdoor Koepel » 09 Jan 2017, 03:49

Er is veel werk in gestopt om de PCINT (Pin Change Interrupt) ook voor de Arduino Mega werkend te krijgen. De library is: https://github.com/GreyGnome/EnableInterrupt.

Bij een Arduino is een interrupt vaak niet nodig. Als de sketch goed geschreven is met weinig delay(), dan kunnen knoppen en sensors vaak zonder interrupt gebruikt worden. Dat is dus een andere benadering dan de meeste embedded systemen, waar interrupts voor van alles gebruikt worden.

Wanneer je meer wilt weten over registers, dan zou ik me niet in de PCINT verdiepen. Gebruik die library voor de PCINT, en verdiep je eens in de mogelijkheden van de Timers en de verschillende PWM modes.

Met registers werken kan ook overbodig ingewikkeld zijn. Probeer maar eens na te gaan waarom deze sketch op een Arduino Uno de led laat knipperen. Dit is dus een voorbeeld van hoe het niet moet.
Code: Alles selecteren
void setup(){DDRB=32;}
void loop(){PINB=32;delay(320);}

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: Pin change interrupts

Berichtdoor Gij Kieken » 09 Jan 2017, 10:55

Hey ,Koepel
De bedoeling is om mijn kennis wat bij te schaven en natuurlijk om het document(je) te gebruiken als naslag werk.
Ik vind het nog altijd makkelijker door een boek te lezen of bladeren dan wel heen en weer te scrollen op het scherm om iets op te zoeken.
Er is veel te vinden op het net maar het is echt een kluwen om er wat door te geraken.Vandaar mijn zoektocht naar een mooi gedetailleerd werkje waar een en ander stap voor stap uit gelegd wordt met voldoende voorbeelden.
Het is een projectje wat ik stap voor stap opbouw en telkenmale wat meer functionaliteit toeken.
De bedoeling van het script zou zijn om drie eenheden te loggen.
Nu log ik ronde tijden en toerental achteras van een kart, dit middels een setje Hc-12 transceivers om het zo in Excel via Usb binnen te trekken en te verwerken naar de nodige grafiekjes in Real-time.
Nu wens ik een derde eenheid erbij, namelijk toerental motor.Op die wijze kan ik dan de slip van de koppeling en de banden bereken om waar nodig de tandwiel verhouding bij te passen.
Gezien er in de Uno en Nano slechts 2-external interrupts(INT0 & INT1) zijn wil ik gebruik maken van Pin_Change Interrupt.
De ronde tijd krijgt de hoogste prioriteit,Rpm achteras lager prioriteit & Rpm motor de laagste.
Daarvoor zou ik dus Pb, Pc & Pd gebruiken.
Vandaar eerst info verzamelen met voorbeeldjes en dan aan de slag.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Pin change interrupts

Berichtdoor Koepel » 09 Jan 2017, 12:17

Dat is inderdaad een project waarbij ik ook interrupts zou gebruiken.
Je hoeft natuurlijk die EnableInterrupt library niet te gebruiken. Dan kun je zelf opnieuw het wiel uitvinden :o en dat weer doen als je een ander Arduino board gaat gebruiken. Er zit echt veel werk in die library.

Je zou ook een Arduino Micro kunnen nemen. Die heeft 5 hardware interrupts: https://www.arduino.cc/en/Reference/attachInterrupt. Zelfs een Pro Micro clone heeft alle vijf de hardware interrupt pinnen nog (https://www.aliexpress.com/item/1pcs-lot-Pro-Micro-for-arduino-ATmega32U4-5V-16MHz-Module-with-2-row-pin-header-For/32267302202.html).

Wil je echt vanaf de basis beginnen met de PCINT (Pin Change Interrupt), dan kun je beginnen met de datasheet door te lezen. Daar staat alles in. Dit is een goede uitleg in het kort: http://gammon.com.au/forum/?id=11488&reply=6#reply6.
Maar uhm, je maakt het jezelf dan wel onnodig erg moeilijk. Gebruik gewoon die EnableInterrupt library of een Arduino Micro. Dat is wat je waarschijnlijk uiteindelijk toch gaat doen ;)

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: Pin change interrupts

Berichtdoor Gij Kieken » 09 Jan 2017, 13:00

Bedankt voor de snelle reactie ,heb weer leesvoer om uit te spitten.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Pin change interrupts

Berichtdoor shooter » 09 Jan 2017, 17:15

Op een NANO zitten standaard maar 2 interupt ingangen, de rerst zou in software moeten, of met een OR poort aan de ingang. Verder kun je ook nog een echte interupt handler in hardwar ervoor zetten.
Maar zoals Koepel al zei, maar zelden nodig.
paul deelen
shooter@home.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 14 gasten