ÄNTLIGEN! (Jag fick det att fungera!) [1-wire-bibliotek]
Postat: 19 mars 2015, 20:49:40
Har strulat en hel del med att få 1-Wire systemet till att fungera. Inte att läsa eller liknande, det är enkelt, men jag har nu skapad en standard fil som jag kan använda till mina projekt.
Det är inte mycket det hela kan:
* Hitta alla anslutna 1-wire enheter med hjälp av den rutin som µchip anger i deras AN APP187. Jag har såklart anpassat den en del. Enheternas adresser sparas i en buffer. Buffern kan sedan sparas i EEPROM (vilket jag gör). Om en enhet redan är registrerat i tabellen hoppas den över så bara nya enheter läggs till.
* Läsa alla temperaturer på de anslutna enheter, konvertera till värden med en decimal och spara i rätt variabel (tabell).
* Allt styrs med interrupt, en bit per interrupt. Interrupten får inte köra snabbare än 8kHz men kan annars köra hur långsamt som helst.
Det interrupt-styrda sparar mig en hel del CPU-tid, (nästan) alla vänttider "elimineras" så att programmet bara snabbt konstaterar att det ska väntas och sedan lämnar interrupten.
Det finns dock en begränsning: parasitmatning fungerar inte. Orsaken är att reset-tiden kan bli för lång - men vid att sätta interrupthastigheten korrekt kan det fungerar ändå. Jag har dock inte gjort hårdvaran för att driva datalinjen starkt under omvandlingstiden...
Jag ska starta omvandlingen vid att aktivera med ett kommando från main-loop och det finns en status att fråga om vad som händer.
Status kan svara att 1-Wire® är inaktiv (väntläge), håller på att jobba, har omvandlat alla temperaturer eller har hittat den sista enhet.
För att leta enheter ska jag använda "Hitta enheter"-kommandot istället för "Omvandla".
Statusen svara bara med "det har hänt något" en enda gång, sedan svaras det med "1-Wire® gör inget".
På detta sätt kan jag bara inkludera filen, kalla initieringen och sedan använda systemet utan tjafs.
Har försökt att få detta att fungera fler gångar men något har alltid kommit mellan och varit mer viktigt. Så nu är jag ganska nöjd!
EDIT: Lade in lite extra information.
[Edit: kompletterade rubrik - hcb]
Det är inte mycket det hela kan:
* Hitta alla anslutna 1-wire enheter med hjälp av den rutin som µchip anger i deras AN APP187. Jag har såklart anpassat den en del. Enheternas adresser sparas i en buffer. Buffern kan sedan sparas i EEPROM (vilket jag gör). Om en enhet redan är registrerat i tabellen hoppas den över så bara nya enheter läggs till.
* Läsa alla temperaturer på de anslutna enheter, konvertera till värden med en decimal och spara i rätt variabel (tabell).
* Allt styrs med interrupt, en bit per interrupt. Interrupten får inte köra snabbare än 8kHz men kan annars köra hur långsamt som helst.
Det interrupt-styrda sparar mig en hel del CPU-tid, (nästan) alla vänttider "elimineras" så att programmet bara snabbt konstaterar att det ska väntas och sedan lämnar interrupten.
Det finns dock en begränsning: parasitmatning fungerar inte. Orsaken är att reset-tiden kan bli för lång - men vid att sätta interrupthastigheten korrekt kan det fungerar ändå. Jag har dock inte gjort hårdvaran för att driva datalinjen starkt under omvandlingstiden...
Jag ska starta omvandlingen vid att aktivera med ett kommando från main-loop och det finns en status att fråga om vad som händer.
Status kan svara att 1-Wire® är inaktiv (väntläge), håller på att jobba, har omvandlat alla temperaturer eller har hittat den sista enhet.
För att leta enheter ska jag använda "Hitta enheter"-kommandot istället för "Omvandla".
Statusen svara bara med "det har hänt något" en enda gång, sedan svaras det med "1-Wire® gör inget".
På detta sätt kan jag bara inkludera filen, kalla initieringen och sedan använda systemet utan tjafs.
Har försökt att få detta att fungera fler gångar men något har alltid kommit mellan och varit mer viktigt. Så nu är jag ganska nöjd!
EDIT: Lade in lite extra information.
[Edit: kompletterade rubrik - hcb]