PIC18F25K22 - Timer, Nested interrupts och annat

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av Magnus_K »

Tackar :tumupp:
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av Magnus_K »

Möjligtvis en allmän fråga. Finns det någon inbyggd funktion eller vanligt sätt att övervaka specifika portar?

Förtydligande:
Jag vill "övervaka" 8 st utgångar och starta en Timer när en av dessa går från låg till hög, vad finns det för alternativ då?
En sak som slog mig direkt var Interrupt on Change men finns det annat man kan göra?

En annan variant är att helt enkelt starta Timern samtidigt som jag sätter utgången hög i programmet. Det jag ser lite som nackdel är att jag får en känsla av att jag kan "förlora kontrollen" över Timern om man blandar in för funktioner i programmet som kan starta den. Det känns bättre med en övervakande funktion.

Tänkte bara fråga då det ofta redan finns färdiga lösningar som jag inte visste om.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av sodjan »

> Jag vill "övervaka" 8 st utgångar...

Inte ingångar? Om vi antar att det är ingångar...

Du har i princip två alternativ:
- Låta ingångarna trigga interrupt.
- Läsa av dom regelbundet i koden.

Den ena är inte mer "rätt" än den andra, de bara
passar olika bra i olika sammanhang.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av Magnus_K »

Tänkte just på utgångar men ju mer jag tänker på det desto dummare känns det att övervaka. Utgångarna sätts ju höga "av mig" så då borde jag kunna anpassa koden efter det.
Får se om det slutar i en enda röra.
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av lillahuset »

Bra tänkt!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av sodjan »

> Tänkte just på utgångar...

Aha, jo det kan ju ibland finnas behov av något slags
central punkt där man övervakar speciellt känsliga/viktiga
signaler oavsett om det är in eller utgångar. Speciellt om
man har en lite mer komplex arkitektur i programvaran
och kanske inte är helt säker på vad som händer var.

Det jag kan tänka mig är en timer styrd rutin som regelbundet
skannar av utgångarna enligt vissa mönster. Sen vad som ska
hända om "larmet går" beror ju lite på. Stänga av allt. Eller
göra en reset. Det beror ju på, som vanligt...

Man kan också låta alla ändringar av utgångar gå via en
central rutin där även kontrollerna kan ligga...

Det gäller normala utgångar som styrs direkt från koden.
Utgångar från t.ex. moduler för kommunikation kanske
inte är lika relevanta att övervaka på det sättet.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av Magnus_K »

sodjan skrev:Man kan också låta alla ändringar av utgångar gå via en
central rutin där även kontrollerna kan ligga...
Det är nog precis det här jag är ute efter!
Rent blockmässigt i skallen så tänker jag mig en OR-gate som ligger parallellt med samtliga latchar till de utgångar som ska bevakas. Utgången från OR-gaten nyttjar man sedan vidare i rutinen.

Antagligen övertänker jag det här som vanligt. Sitter just nu och knapprar och kan återkomma lite senare men det konkreta exemplet, behöver bara lite mer kod. Det är mycket möjligt att jag är ute och snurrar men sen lär man sig mycket på kuppen också!

EDIT: Oooo herrejösses vad mycket att hålla reda på. Har på min höjd grejat med en timer och en interrupt innan. Nu är det 3 av varje med olika prioritet, frekvenser, matchande värden och tider överallt. Blir lite korvstoppning med räknandet av klockcykler och nano/mikro-sekunder hit och dit. Nej, dags att vila skallen och tänka på mitt framtida bryggeri en stund.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av Magnus_K »

Efterfrågar lite läshjälp från databladet.
Om jag använder 5V som matningsspänning; vilka spänningsnivåer blir då brytpunkterna mellan hög och låg? Förstår inte "Conditions"-kolumnen riktigt.
Det verkar som att om ingången är konfigurerad som digital ingång så är det en TTL-ingång... (?)
High_Low_levels.JPG
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46963
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av TomasL »

Conditions anger vid vilken matningsspänning som används:
För låg nivå gäller:
Vid 4,5-5,5V är en nolla max 0,8 V
Vid 1,8-4,5V är en nolla 0,15*Vdd dvs från 0,27 till 0,675V
osv......
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av Magnus_K »

Ahaa, var det så man läste...
Så för hög nivå så:
Vid 4,5-5,5V är en etta minst 2 V
Vid 1,8-4,5V är en etta minst 0,25*Vdd+0.8, dvs från 1,25 till 1,925V

Då hänger jag med, tackar TomasL.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av sodjan »

> Det verkar som att om ingången är konfigurerad som digital ingång så är det en TTL-ingång...

Ja, eftersom en normal CMOS signal från en CMOS *utgång* i alla fall i princip går mellan
Vdd och Vss, så brukar man se till att en CMOS *ingång* även tolererar de nivåer som en
äldre TTL utgång kör med, de har ju ett lite mindre "swing", så att säga.

Nu så behöver det inte vara alla ingångar som är "TTL kompatibla", det brukar framgå
av tabellen i början av databladet med alla pinnarna, vilka det är.

> ...så är det en TTL-ingång...

Nja, det är en CMOS ingång som tolererar TTL spänningsnivåer... :-)
Men den har fortfarande t.ex en CMOS ingångs låga läckström o.s.v.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av Magnus_K »

Aha, det är så ja. Just det, det står i beskrivet precis under tabellen.
Det jag var osäker på var just vad dom menade med 4.5V ≤ VDD ≤ 5.5V. Sen fick jag ett behövligt förtydligande av resten också :tumupp:

En programmeringsfråga lite snabbt:

Det jag vill skriva är "Om Button_Read_Status är sant och Running inte är sant så..."
Hur gör jag det? Provade med: if (Button_Read_Status != Running) {} nu men det blir något tokigt. Det börjar oscillera på utgången och ha sig men jag tror det har med detta att göra då jag har flera av dessa "buttons" och if-satser.

Tror jag skrivit något i stil med "Om Buttons_Read_Status är inte det samma som Running så..." men är osäker.

EDIT: Vänta nu, det borde bli if (Button_Read_Status && !Running) {}
Användarvisningsbild
Xyzzy
Inlägg: 1260
Blev medlem: 30 januari 2004, 22:31:07
Ort: Uppsala, Sweden

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av Xyzzy »

Helt korrekt, första exemplet är ju sant även om Button... är falsk och running är sann.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av Magnus_K »

Perfekt, tackar. Ja nu fungerade det mycket bättre :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Inlägg av sodjan »

Det blir "if Button_Read_Status and not Running".
Hur det kodas i olika språk varierar... :-)

> if (Button_Read_Status != Running)

Det uppfyller både dessa villkor:
"if Button_Read_Status and not Running"
"if not Button_Read_Status and Running"

Vet inte om det var meningen...
Skriv svar