ÄNTLIGEN! (Jag fick det att fungera!) [1-wire-bibliotek]

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Icecap
Inlägg: 26226
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

ÄNTLIGEN! (Jag fick det att fungera!) [1-wire-bibliotek]

Inlägg av Icecap »

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]
Senast redigerad av Icecap 19 mars 2015, 21:04:48, redigerad totalt 1 gång.
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: ÄNTLIGEN! (Jag fick det att fungera!)

Inlägg av Lennart Aspenryd »

Grattulerar!

Det är först när man både har kommit i mål, och haft kännedom om vartifrån man kommer!

Som man kan bygga en snabb och säker väg för framtida bruk.

Jag gillar detta sätt att ta tag i uppgiften, när man har löst den för gott.

Grattis som sagt säger Lasp
Användarvisningsbild
hcb
Moderator
Inlägg: 5792
Blev medlem: 23 februari 2007, 21:44:50
Skype: hcbecker
Ort: Lystrup / Uppsala
Kontakt:

Re: ÄNTLIGEN! (Jag fick det att fungera!)

Inlägg av hcb »

:tumupp:
Användarvisningsbild
PeterH
Inlägg: 8614
Blev medlem: 15 mars 2006, 15:57:10
Ort: Gävle/Valbo

Re: ÄNTLIGEN! (Jag fick det att fungera!)

Inlägg av PeterH »

Komplettera gärna rubriken med "1-wire" eller liknande så man vet vad du fått att fungera...
Användarvisningsbild
Oltronix
Inlägg: 408
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: ÄNTLIGEN! (Jag fick det att fungera!)

Inlägg av Oltronix »

Grattis. 1-wire är ju lite pyssligt spec om man har flera givare. Jag körde PIC och DS1820 tidigare men nu har jag fegat till och kör DS9490R och RPI numera. DS9490R är jättebara på att driva många 1-wire. DS9490R har nog HW-driver som gör att det fungerar bra. Jag har ett 1-wire nät på c:a 30-40m och c:a 10st DS1820. Har aldrig haft problem med DS9490R. Jag hade problem tidigare med PIC och en defekt givare (DS1820) som belastade nätet. Allt gick bra när jag kollade vilka givare som fanns men vid läsning och konvertering av temp så fick jag data men temp var helt uppåt vägarna.

Vad har du för applikation?
Hur många och vilka givare har du?
Hur kaliberar du givarna?
Användarvisningsbild
Icecap
Inlägg: 26226
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: ÄNTLIGEN! (Jag fick det att fungera!) [1-wire-bibliotek]

Inlägg av Icecap »

Oltronix: Mitt 1-Wire® nät består i det givna projekt av 1 sensor som är monterat utomhus. Jag vill dock även ha en inomhusgivare.

Men hela grejen är att jag använder ett och samma styrkort till en del olika saker och då kan det bli aktuellt med att ha fler sensorer på samma nät. Faktisk har jag just fått hem 30 st av den nyaste version (fast de var en sväng förbi SAAB i Linköping).

Ett projekt som väntar på montage är ett par skyltar som varnar vid halka om temperaturen i backen är inom ett viss intervall men som annars visar lufttemperatur. Detta projekt fungerar - men är inte lika bra på att hitta sensorer, man ska montera en åt gången och göra en sökning. Jag kunde uppgradera mjukvaran till det projekt - men det fungerar som det är just nu så det får vara.

Jag har ett par transistorer mellan µC och omgivningen som skydd, annars använder jag bara två pinnar på µC'n.

Själva funktionen har retat mig att tag, alltså att jag inte har fått till det. Men nu fungerar det och jag kan enkelt implementera det på vilken annan µC som helst. Självklart måste jag trimma in timingen vid läsning och skrivning om jag byter µC eller hastighet - men sedan är det bara att tuta och köra.

Min tanke är att nu kan jag enkelt bygga tid/temp-funktioner och min "lekplattform" är min klocka på kontoret. Den har en grafisk RGB-yta på 32*48 punkter, visar veckodag, datum, tid, utetemperatur samt dygnmedeltemperatur. Den sparar även utetemperaturen var 5'te minut (ja, jag har en idé med det också).

Jag har dock en bit på displayen som är 32*8 punkter som är tom... och det stör mitt öga.

För att spela Tetris behöver man i övrigt en yta på 10*20 punkter, något som gör att jag kan använda 2*2 punkter per "pixel" och ändå ha plats för poäng...

EDIT: Jag vill nog fylla den tomma yta med solens upp- och nedgångstid för den givna dag. Den uträkning har jag fungerande sedan länge, jag har dock upptäckt att den inte fungerar med Fujitsus cos() och jag ser fram mot att kolla om det fungerar med GCC's math.h. Det fungerar dock med Renesas kompiler för M16C.
Skriv svar