Jimmy:Nej inte direkt, jag har fått lusläsa databladen och rätt troligt är att det inte kommer fungera om man har en "riktig" onewiremaster (nu är det ju jag som sitter på den och kan ändra lite efter behov).
För att vara riktigt säker skulle man ha någon form av shiftregister eller nåt för att kunna avlasta PICen en aning. Det är väldigt tajt nu och det finns inte allt för mycket till godo även fast PICen körs på högsta möjliga INTOSC (32 MHz).
Det som krävs är att man är envis och har ett oscilloskop. Utöver detta använde jag bara databladet till DS1820.
En sak som är bra att veta är att DS1820 har ganska stor kapacitans på sin ingång vilket PICen inte har. Jag körde med en extra sensor i labbplattan på ingången för att inte missa detta. MEN då svarar ju även denna på signaler
Sen har jag förenklat bort allt annat än vad som krävs för att få funktion att implementera alla DS1820s funktioner orkar jag helt enkelt inte. Nu mottar jag bara funktionerna i exakt den ordning jag vet att de kommer.
Däremot CRC kan jag verkligen inte förstå hur det skulle genereras så jag hittade
denna sida och tack vare den här koden så fixade sig även detta:
Kod: Markera allt
CALC_CRC_BYTE: ; applies bit by bit to shift reigister algorithm
MOVLW .8
MOVWF N
MOVF IBYTE, W
MOVWF TEMP_1 ; copy IBYTE to TEMP
CALC_CRC_BYTE_1:
MOVF TEMP_1, W
ANDLW 01H ; isolate least significant bit
MOVWF DATA_BIT
CALL CALC_CRC_BIT
RRF TEMP_1, F ; next data bit now in least sig bit
DECFSZ N, F ; do this for each of the eight bits
GOTO CALC_CRC_BYTE_1
RETURN
CALC_CRC_BIT:
MOVF DATA_BIT, W ; calculate the feed back bit
XORWF SHIFT_REG, W
ANDLW 01H
MOVWF FB
BCF STATUS, C ; shift_reg = shift_reg >> 1
RRF SHIFT_REG, F
BTFSS FB, 0
GOTO CALC_CRC_BIT_DONE ; if FB was zero, we are done
MOVLW 8CH ; otherwise, invert bits 7, 3 and 2
XORWF SHIFT_REG, F
CALC_CRC_BIT_DONE:
RETURN
Fungerar som så att man rensar SHIFT_REG sen skickar man in varenda byte i IBYTE. Vill man således kalkylera en CRC byte så skickar man in allt data utom sista (som man ju skall räkna ut) denna byte ligger då i SHIFT_REG. För att kontrollera skickar man in CRC byten som sista och är då SHIFT_REG=0 så har man reducerat chansen att något är fel till 1 på 256
CRC är ett måste då även den allra bästa kod jag kan presentera inte är i närheten av så stabil som en riktig onewire-enhet.
Vart långt detta

får ta och posta bilderna i nytt inlägg.