Jag skall ersätta en reläbox som används för att upprätta en slags logik i ett styrsystem. Efter att letat runt på lite olika lösningar så fastnade jag för att använda mig av en PIC. Har tänkt mig att använda en PIC16F877A och programmera den i C.
Skulle behöva lite tips på generell design och har därför lite frågor.
1a) Det är ungefär 20 insignaler, hur märker jag om en av signalerna ändras? Via interupt eller skall man lägga sig i en loop i main() och polla alla insignaler med jämna mellanrum?
1b) Om svaret på 1a) är via interupt, finns det så många ingångar som man kan definera interuptrutiner för på 877A, eller hur gör jag då?
2) Hur temperaturkänslig är min PIC-krets, kan jag använda den utomhus? Vad behöver jag i så fall tänka på?
3) Finns det något smart sätt att logga antalet driftstimmar som PIC:en har varit igång? Antar att man skriver det till EEPROM, men det är ju inte så smart att skriva dit för frekvent eller?
4) Vilket är det bästa sättet att ta emot en insignal som är 12V? Via optokopplare eller går det bra att sätta ett lämpligt motstånd?
5) Hur driver jag enklast en last på 1A och 12 V?
Hoppas jag inte ställer allt för konstiga frågor...men frågar man inte så får man inga svar!
Tack på förhand!
Ersätta relälogik med en PIC!
Du kan som bäst ha 8 st interrupt-on-change i PIC, alltså måste du polla. Det är dock inte så svårt alls. Om vi antar att PORTA är en av portarna som ska övervakas:
unsigned char Previous_A, Result, Memory;
...
Memory = PORTA; // Detta läser PORTA 1 gg och förhindrar att ett nivåbyte kan gå oavkänd
Result = Memory ^ Previous_A;
Previous_A = Memory;
// Result innehåller numera en '1':a för varje plats det skiljer från förra genomgång
Du kan använda den utomhus, se bara till att använda en för industriellt temp. område.
Du kan logga hela timmer, det pallar den för i ca: 11 år.... det finns även ferroelektriska seriella EEPROM-minnen med ett max antal skrivcykler om ca: 10^14. Det skulle väl räcka.
12V....det är alltid störsäkert och bra med optokopplare.
Laster drivs bra via MOSFET eller relä eller en kombination.
unsigned char Previous_A, Result, Memory;
...
Memory = PORTA; // Detta läser PORTA 1 gg och förhindrar att ett nivåbyte kan gå oavkänd
Result = Memory ^ Previous_A;
Previous_A = Memory;
// Result innehåller numera en '1':a för varje plats det skiljer från förra genomgång
Du kan använda den utomhus, se bara till att använda en för industriellt temp. område.
Du kan logga hela timmer, det pallar den för i ca: 11 år.... det finns även ferroelektriska seriella EEPROM-minnen med ett max antal skrivcykler om ca: 10^14. Det skulle väl räcka.
12V....det är alltid störsäkert och bra med optokopplare.
Laster drivs bra via MOSFET eller relä eller en kombination.
Icecap har (som vanligt) givit ett bra svar, men jag vill bara komplettera
lite här och där...
För fler än 8 IOC ("Interrupt On Change) pinnar kan man använda "Port Expanders".
Se www.microchip.com för mer info.
> finns det så många ingångar som man kan definera interuptrutiner för på 877A,
Här är det nog lite missförstånd...
Alla 8 IOC ingångar ger *samma* interrupt. Sedan får man själv i sin kod
kolla vilken av de 8 pinnarna det var som ändrades.
> Hur temperaturkänslig är min PIC-krets, kan jag använda den utomhus?
> Vad behöver jag i så fall tänka på?
Temperatur gränserna (och eventuella begränsningar i funktionen) finns
tydligt angiva i respektive datablad. För maximal temp-område, finns det
"Extended temp range" device (de heter något med ett "E" i slutet av
namnet. De "Industrial temp range" som Icecap nämner är i princip
standardmodellen. Jag tror att det är "-E/P" resp "-I/P" för DIP versionen.
För "loggning" i EEPROM, så är ett vanligt sätt att logga i RAM och sedan
om spänningen försvinner kopiera värderna till EEPROM. Man får ha lite
extra prylar för att detektera att spänningen försvinner...
lite här och där...

För fler än 8 IOC ("Interrupt On Change) pinnar kan man använda "Port Expanders".
Se www.microchip.com för mer info.
> finns det så många ingångar som man kan definera interuptrutiner för på 877A,
Här är det nog lite missförstånd...
Alla 8 IOC ingångar ger *samma* interrupt. Sedan får man själv i sin kod
kolla vilken av de 8 pinnarna det var som ändrades.
> Hur temperaturkänslig är min PIC-krets, kan jag använda den utomhus?
> Vad behöver jag i så fall tänka på?
Temperatur gränserna (och eventuella begränsningar i funktionen) finns
tydligt angiva i respektive datablad. För maximal temp-område, finns det
"Extended temp range" device (de heter något med ett "E" i slutet av
namnet. De "Industrial temp range" som Icecap nämner är i princip
standardmodellen. Jag tror att det är "-E/P" resp "-I/P" för DIP versionen.
För "loggning" i EEPROM, så är ett vanligt sätt att logga i RAM och sedan
om spänningen försvinner kopiera värderna till EEPROM. Man får ha lite
extra prylar för att detektera att spänningen försvinner...
> Var hittar jag ett exempel på HW för att detektera spänningsbortfall?
> Finns någon speciell krets har jag för mig...eller?
Finns flera sätt, enkla kopplingar med konding, diod m.m.
Sedan special kretsar ("watchdog") från t.ex Maxim bara för att nämna
en leverantör som brukar ha mycket i detta område.
Men i de flesta fall räcker det med enkla kopplingar med lite
lösa komponenter...
> Finns någon speciell krets har jag för mig...eller?
Finns flera sätt, enkla kopplingar med konding, diod m.m.
Sedan special kretsar ("watchdog") från t.ex Maxim bara för att nämna
en leverantör som brukar ha mycket i detta område.
Men i de flesta fall räcker det med enkla kopplingar med lite
lösa komponenter...