Sida 4 av 7

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 21 september 2015, 01:09:06
av Magnus_K
Tackar :tumupp:

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 21 september 2015, 22:13:28
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.

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 21 september 2015, 22:18:38
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.

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 21 september 2015, 22:25:05
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.

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 21 september 2015, 22:35:57
av lillahuset
Bra tänkt!

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 21 september 2015, 22:47:02
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.

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 21 september 2015, 22:57:25
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.

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 22 september 2015, 21:06:15
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

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 22 september 2015, 21:23:30
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......

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 22 september 2015, 21:30:09
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.

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 22 september 2015, 22:10:32
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.

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 23 september 2015, 10:49:43
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) {}

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 23 september 2015, 11:01:09
av Xyzzy
Helt korrekt, första exemplet är ju sant även om Button... är falsk och running är sann.

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 23 september 2015, 11:03:12
av Magnus_K
Perfekt, tackar. Ja nu fungerade det mycket bättre :)

Re: PIC18F25K22 - Timer, Nested interrupts och annat

Postat: 23 september 2015, 11:03:45
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...