Jag vill plocka in 8 bitar och skapa en byte på så vis. Koden ligger i interruptet och körs varje gång jag får ett negativ flank på pinnen jag läser av.
Signalen som kommer in är från 1-wire adapter. Linan ligger hela tiden hög och när en 0:a skickas blir linan låg i 60us och återvänder sedan till hög.
När en 1:a skickas blir linan låg i 5us och sedan hög i 55us och stannar där sedan. Varje bit skickasmed typ 5us mellanrum.
Det tar ca 23us innan koden körs så jag får rätt värde att läsa av. Har debuggat med signalanalysator och tilldelat en annan pinne avläsningsvärdet. Dvs PORTA0.F0=PORTB0.F0; i stället för koden ovan och då fick jag ut rätt.
Ska testa det där men varför jag vill trycka ihop det var för att få ner tiden från att det blir avbrott till att något händer.
Kommer antagligen få köra en del i ASM och/eller köra på högra klockhastighet för att hinna svara under en READ SLOT.
Tycker bilden är lite otydligen men man borde väll ha biten på linan efter max 15us och som det är nu tar det typ 20us att bara komma in i avbrottsrutinen när PICen körs i 8Mhz.
Jag hade faktisk gjort lite extern hårdvara som hade reagerat på en negativ flank och efter en viss tid givit en positiv puls ut. Detta hade jag sedan lagt in som en synkron ingång på U(A)RTen och då fått en byte "automagisk" efter 8 bits. Det extra hårdvara hade alltså shiftat in en bit i hårdvaruregistret och interrupten hade kommit efter 1 byte.
Jag läser om och om ditt inlägg men jag förstår inte vad du har gjort. Var det någon hårdvarulösning som gjorde att du kunde använda UARTen eller?
Hittade en sida där de beskriver hur man använder UARTen för att få till en 1-wire busmaster på en PIC men jag får i alla fall inte riktigt ihop det med det du skrev Icecap. Förklara gärna lite utförligare..
Funderar på om man kan ha någon extern krets som triggar ut en signal som PICen har satt innan på något annat ben. På så vis måste inte avbrottet vara lika snabb utan det räcker med att den förberedar med att lägga ut nästa bit för att förbereda för nästa triggning.
När UART'en redan är använd kan det ju kvitta men vad jag ville föreslå var att göra en försenad klockpuls som, med UART'en i synkront läge, ville shifta in datan rätt, steg för steg. detta medförde att det inte ville komma en interrupt innan en hel byte var mottagit och då kunde man låta hårdvaran klara en stor del av jobbet.
Har inte jobbat me PIC18Fxxx tidigare. Så du får gärnaförklara det där med att styra interrupts i 2 nivåer och vad PLL är.
Jag tror jag ska börja med att trycka dit en 20Mhz kristall till att börja med. Dock verkar det inte finnas några här tyvärr på exjobbet mer än på min PIC-programmerare.
Testade Icecaps kod förresten och den fungerade fint efter viss mod.
Ha! Hittade ett gammalt nätverkskort med 20Mhz kristall på. Visserligen ytmonterad men det ska nog gå.
Förstår dock inte riktigt hur den kopplas eftersom den har 4st ben. Det är en svart avlång ytmonterad krets med två ben på varje kortsida. Benen på ena kortsidan går en större 3Com krets så jag antar att jag ska koppla in mig där men andra sidan vet jag inte var den går till, om det bara är jord kanske.
Den är märkt:
20.000M
6580A
och så har denen liten logga som ser ut som ett stort M. Typ som Microchips.
PLL låter trevligt och samma sak med 2 nivå interrupt. Frågade på forumet tidigare någon gång skillnaden mellan PIC16Fxxx serien och PIC18Fxxx serien och fick inte fram något. Men nu vet jag något som skiljer sig i alla fall.
Har dock beställt utvecklingskort för PIC16Fxxx seriern men det kanske går att modda så att det fungerar för PIC18Fxxx serien också.