1-Wire med SPI?
Postat: 23 november 2015, 20:45:11
Jag gillar att saker och ting inte tar så lång tid när man programmerar. Att skriva program kan såklart ta en helsikes tid men vänta-funktioner hatar jag - om de stannar programflödet under tiden de väntar.
Tyvärr är timing en del av vardagen och ett exempel är 1-Wire kommunikation.
Även där har jag stramat det en del men det kan göras bättre!
Steg 1 är att jag alltid har någon drivning mellan µC och ledningar som lämnar kretskortet! I detta fall ett par N-MOSFET (2N7002). Detta betyder att jag har en "sänd"-pinne på µC' och en annan "mottagning"-pinne.
Ska jag köra ut en '0'-puls måste µC'n tyvärr vänta den tidperiod som behövs, jag har kollat med interrupt men det blir ingen vinst med det.
Men nu fick jag en idé: SPI! Om jag byter pinnar så att jag har en UART TX och RX och sätter UART'en i SPI (Clock Syncronus) kommunikation med en bitrate runt 800k, då blir det till att göra ett par ISR som tar hand om detta.
Ska man skicka en reset (480µs+) är det bara en fråga om att skicka 384 st 0xFF, vid att skicka några 0x00 efter det kan man enkelt läsa ACK-pulsen på RX.
På detta sätt kan man enkelt köra hårdvarabaserat kommunikation med tight tidschema, perfekt till 1-Wire. Visst, vissa saker - t.ex. reset-pulsen - kan man köra enklare med en timer eller liknande men själva kommunikationen är en fråga om att sända och ta emot några bytes och tolka dom rätt.
Tyvärr är timing en del av vardagen och ett exempel är 1-Wire kommunikation.
Även där har jag stramat det en del men det kan göras bättre!
Steg 1 är att jag alltid har någon drivning mellan µC och ledningar som lämnar kretskortet! I detta fall ett par N-MOSFET (2N7002). Detta betyder att jag har en "sänd"-pinne på µC' och en annan "mottagning"-pinne.
Ska jag köra ut en '0'-puls måste µC'n tyvärr vänta den tidperiod som behövs, jag har kollat med interrupt men det blir ingen vinst med det.
Men nu fick jag en idé: SPI! Om jag byter pinnar så att jag har en UART TX och RX och sätter UART'en i SPI (Clock Syncronus) kommunikation med en bitrate runt 800k, då blir det till att göra ett par ISR som tar hand om detta.
Ska man skicka en reset (480µs+) är det bara en fråga om att skicka 384 st 0xFF, vid att skicka några 0x00 efter det kan man enkelt läsa ACK-pulsen på RX.
På detta sätt kan man enkelt köra hårdvarabaserat kommunikation med tight tidschema, perfekt till 1-Wire. Visst, vissa saker - t.ex. reset-pulsen - kan man köra enklare med en timer eller liknande men själva kommunikationen är en fråga om att sända och ta emot några bytes och tolka dom rätt.