Just när projektet såg ut att komma igång har det hängt sig på en irriterande detalj: En ATmega88 ska skicka data någon halvmeter via en tunn tretrådig ledning till en ATtiny44 som i sin tur ska driva en multiplexad LED-display. Ledningen får bara innehålla GND, +5V och data, det finns inte plats för en fjärde tåt.
Den mottagande ATtinyn bör ha gott om tid på sig att fånga upp mottagen information, det enda som kommer störa är LED-multiplexingen som måste uppdateras minst 50ggr i sekunden för att inte uppfattas som "darrig".
Den sändande ATmega88:an kommer däremot ha en hel del tidskritiska saker för sig så jag vill inte belasta den med att i mjukvara generera självklockande en-tråds överföring t.ex. liknande Dallas 1-wire. Det vore således smidigt att kunna använda USART:en för sändning, men jag
har ingen färdig idé för hur vanlig standard asynkron seriell mottagning kan ordnas med C-kod till den mottagande ATtinyn vars USI bara kan hantera synkron kommunikation (TWI/SPI).
Till råga på allt måste överföringen fungera säkert trots att båda enheterna kommer drivas från sina RC-klockor.
Idéer någon?
Behöver soft-UART i C för ATtiny44
Re: Behöver soft-UART i C för ATtiny44
Jag har för mig att atmel har kod för detta. Rota bland deras demosnuttar...
Annars är det skitenkelt. Vissta kan man CPU vänta, men det är inte rätt.
Fyll i de missade detaljerna!..
Annars är ett sätt att sätta upp en timer, 16ggr bitrate och sampla I/O pinnen.
När startflanken kommit, väntar du en halv bit(dvs 8 timer) sedan kommer varje bit var 16e timer.
Alternativt, du tar in datat på en extern INT, startar timer satt till halv bitrate + stäng av INT, startbit inne, ställ om timer till bitrate, sedan kommer varje bit varje timer. Räkna till hur många bitar du vill ha. slå på INT.
Har du någon annan timer INT som går (display multiplex etc), använd den...
Annars är det skitenkelt. Vissta kan man CPU vänta, men det är inte rätt.
Fyll i de missade detaljerna!..
Annars är ett sätt att sätta upp en timer, 16ggr bitrate och sampla I/O pinnen.
När startflanken kommit, väntar du en halv bit(dvs 8 timer) sedan kommer varje bit var 16e timer.
Alternativt, du tar in datat på en extern INT, startar timer satt till halv bitrate + stäng av INT, startbit inne, ställ om timer till bitrate, sedan kommer varje bit varje timer. Räkna till hur många bitar du vill ha. slå på INT.
Har du någon annan timer INT som går (display multiplex etc), använd den...
Re: Behöver soft-UART i C för ATtiny44
Om du kollar i databladet, 14.4.1 ,så nämner de att USI kan användas som halv-duplex UART. Hur man gör bör också finnas i databladet eller som en app-note.