Random pinchange på atmega 328 (arduino)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Elst
Inlägg: 63
Blev medlem: 25 april 2018, 12:57:09

Random pinchange på atmega 328 (arduino)

Inlägg av Elst »

Jag blir helt tokig på ett konstigt fel. Jag har satt upp pinchange på 3 pinnar (de tre översta signalerna nedan, channel 4-5-6). När någon av dessa ändras anropas ett interrupt. Detta interrupt har jag nu i ren desperation efter en tids huvudbry försett med en digital HELLO WORLD på channel 7 som togglas vid varje anrop enligt nedan varpå jag upptäckte en väldigt skum grej.

// PIN CHANGE
ISR (PCINT0_vect)
{
// HELLO WORLD
test=1-test;
digitalWrite(10,(test==1)?LOW:HIGH);
...
...

Det är alltså som synes inte det minsta fel på insignalerna som triggar pinchange här utan MCUn producerar interna pinchange på ren inspiration (!?)

Vad kan få detta att hända?

Bild 1 är hur det ska se ut när det fungerar. Bild 2 visar på helt random genererade pinchange -irq.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av Elst 4 juli 2018, 23:05:57, redigerad totalt 1 gång.
Glattnos
Inlägg: 2972
Blev medlem: 29 oktober 2009, 20:01:18

Re: Random pinchange på atmega 328 (arduino)

Inlägg av Glattnos »

Kör du annan kod som kanske påverkar pinnen? Är pinnen satt som Output? Är du säker på att Pinchange är initeierat korrekt så det inte är någon annan pinne än just dom tre som genererar interrupt, kanske pinnen som du togglar ligger på samma interrupt så den skjuter sig själv i foten? :)
Användarvisningsbild
hawkan
Inlägg: 2585
Blev medlem: 14 augusti 2011, 10:27:40

Re: Random pinchange på atmega 328 (arduino)

Inlägg av hawkan »

Fritt ur minnet har jag för mej att pinchange interrupt sker för en port och inte en pinne. Det första man gör är att kolla vilken pinne som var skyldig. Med det sagt så kan det vara valfri pinne på en port som genererar interruptet.
Men jag reserverar mej för att jag kan minnas grovt fel.
Glattnos
Inlägg: 2972
Blev medlem: 29 oktober 2009, 20:01:18

Re: Random pinchange på atmega 328 (arduino)

Inlägg av Glattnos »

Precis så är det :) Det var det jag menade, om han kopplat fler än dom pinnarna till nått. Kan vara input eller output, alla ändringar på den porten ger interrupt.
kenneth1212
Inlägg: 74
Blev medlem: 1 maj 2017, 23:59:48
Ort: Göteborg

Re: Random pinchange på atmega 328 (arduino)

Inlägg av kenneth1212 »

Var ett tag sedan jag höll på med interrupt men man ska ha minimalt med kod i interruptrutinen. Kanske bara sätta en flagga eller så och hantera resten i en annan rutin som känner av flaggan.

.
Användarvisningsbild
Klas-Kenny
Inlägg: 11292
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Random pinchange på atmega 328 (arduino)

Inlägg av Klas-Kenny »

kenneth1212: Nja, inte nödvändigtvis. Beror helt på applikation, men i många fall kan man göra en hel del i ett interrupt. Men såklart inte onödigt mycket.
bearing
Inlägg: 11231
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Random pinchange på atmega 328 (arduino)

Inlägg av bearing »

Det beror ju på vilken typ av interrupt, samt förväntade frekvensen. Om det handlar om externt interrupt, och ingångarna har lågpassfilter, eller interruptkällorna är kända och utan glitchar, vet man ju ingefär hur ofta interrupten kan komma. Men med tre helt fristående insignaler kan ju interrupten ramla in med nanosekunders skillnad, och i så fall går det inte att säga att man aldrig kommer missa ett interrupt eftersom att pinnarna kan ändras två gånger medans koden i interruptet körs.

Jag gissar att av denna anledningen är externa interrupt inte rekommenderade enligt MISRA.

I det här fallet verkar det ju handla om en synkron 3-fas-motor eller liknande, och då kan ju inte interrupten ploppa upp hur som helst. Dessutom antyder han ju att printf bara är en temporär kod för att kunna hitta felorsaken.

Men det vore ju bra att bekräfta att andra pinnar inte genererar interrupt. Annars kan man behöva kika på signalerna med oscilloskop. Logic-analysatorn kanske har andra tröskelvärden för 1/0 än vad processorn har, så att signalerna ser fina ut på den, men inte för processorn. Till exempel.
Elst
Inlägg: 63
Blev medlem: 25 april 2018, 12:57:09

Re: Random pinchange på atmega 328 (arduino)

Inlägg av Elst »

Lite mer fakta i caset: Det är alltså min BLDC -mjukvara och insignalerna är från motorns hallgivare. Felet uppstår när när jag ökar spänningen till motorn från nätagget som driver hela historien idag. Den magiska gränsen är 20 volt någonting (ett spöke har följt med mig hela vägen och orsakat olika problem vid denna spänning!). Över denna nivå uppstår detta fel interrupt-fel. Så det känns som ett analogt fel. Felet tycks också försvinna om jag sänker PWM -frekvensen till t.ex. 10 KHz. Det talar väl också för något analogt.

Under 20 volt fungerar allt prima. Både drivningen av motorn, PID -regulatorns styrning av PWM för att hålla exakta varvtal m.m. (med reservation för att P,I,D behöver trimmas lite bättre). Det går också ha en hög PWM -frekvens utan problem. Men över 20 volt händer det bilderna ovan visar med interruptet.
Glattnos
Inlägg: 2972
Blev medlem: 29 oktober 2009, 20:01:18

Re: Random pinchange på atmega 328 (arduino)

Inlägg av Glattnos »

Då är det kanske någon pinne som plockar upp störningar från motorn och triggar interrupet. Har du testat att jorda övriga pinnar på porten?
Användarvisningsbild
Klas-Kenny
Inlägg: 11292
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Random pinchange på atmega 328 (arduino)

Inlägg av Klas-Kenny »

Logikanalysatorn är bra på mycket, men ett sånt här fel jagar man med oscilloskop!

Mät på signalerna från hallgivarna och se hur de ser ut.
Det är ju alltid omkring flankerna de extra interrupten sker, aldrig mitt emellan.
Högst sannolikt relaterat till störningar snarare än mjukvara.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45173
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Random pinchange på atmega 328 (arduino)

Inlägg av TomasL »

Vad använder du för att mäta på signalerna? (och generera bilderna)
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Random pinchange på atmega 328 (arduino)

Inlägg av lillahuset »

Pin change interrupt sker per port och man kan maska vilka pinnar som deltar. Läs 17.2.4..17.2.8 i:
http://ww1.microchip.com/downloads/en/D ... 01984A.pdf
Elst
Inlägg: 63
Blev medlem: 25 april 2018, 12:57:09

Re: Random pinchange på atmega 328 (arduino)

Inlägg av Elst »

Använder Saleae logikanalysator. Jag har sen bara tagit en skärmdump.

@lillahuset
Precis... det är så jag gör också. Alltså...jag är rätt så säker det inte är på denna nivå något buggar, då hade det blivit en annan typ av fel. Då hade nog ingenting fungerat förresten.

Jag får återkomma när jag huggit tag på mitt oscilloskop som står hos farsan.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43149
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Random pinchange på atmega 328 (arduino)

Inlägg av sodjan »

> Bild 2 visar på helt random genererade pinchange -irq.

Nej, de är inte "helt random". De är samlade kring flankerna på insignalerna.
Det hade varit helt annorlunda om de verkligen hade varit slumpmässiga.

Min hetaste gissning är att insignalerna har några störningar vid sina
flanker som är för korta för att fångas av logikanalysatorn från Saleae
men ändå tillräckliga för att trigga IOC logiken på porten. Men det kan
vara något annat också, fakta behöver kompletteras.

Kod: Markera allt

// PIN CHANGE
ISR (PCINT0_vect)
{
// HELLO WORLD
test=1-test;
digitalWrite(10,(test==1)?LOW:HIGH);
Är det där en komplett kod som visar fenomenet?
Om inte så bör du fixa det minsta möjliga kodexemplet
som uppvisar fenomenet så att det går att kolla.

> Jag har satt upp pinchange på 3 pinnar (de tre översta signalerna nedan, channel 4-5-6).

Komplettera med aktuell kod som gör det som du påstår så att det går att verifiera.
Du kan ju tro att du har gjort något men gjort något annat. Kanske inte i just
detta fall, men generellt...

> När någon av dessa ändras anropas ett interrupt.

"Ändras" hur då? Var kommer signalerna från? Är det något slags rotationsgivare?
Om det är det, vad är det för typ och hur är den inkopplad?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45173
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Random pinchange på atmega 328 (arduino)

Inlägg av TomasL »

Använder Saleae logikanalysator. Jag har sen bara tagit en skärmdump.
Ja där har du faktiskt ett problem, du skall nog använda ett oscilloskop för att verifiera dina signaler.
Logikanalysatorn visar ju bara 1 eller 0, du kan inte se om du har störningar och jitter genom den.
Skriv svar