
PIC18F25K22 - Timer, Nested interrupts och annat
- 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
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.
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.
Re: PIC18F25K22 - Timer, Nested interrupts och annat
> 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.
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.
- 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
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.
Får se om det slutar i en enda röra.
- 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
> 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.
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.
- 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
Det är nog precis det här jag är ute efter!sodjan skrev:Man kan också låta alla ändringar av utgångar gå via en
central rutin där även kontrollerna kan ligga...
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.
- 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
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... (?)
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... (?)
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: PIC18F25K22 - Timer, Nested interrupts och annat
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......
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......
- 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
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.
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.
Re: PIC18F25K22 - Timer, Nested interrupts och annat
> 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.
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.
- 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
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å
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) {}
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å

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) {}
Re: PIC18F25K22 - Timer, Nested interrupts och annat
Helt korrekt, första exemplet är ju sant även om Button... är falsk och running är sann.
- 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
Perfekt, tackar. Ja nu fungerade det mycket bättre 

Re: PIC18F25K22 - Timer, Nested interrupts och annat
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...
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...