Sida 1 av 1
Seriel data input på en CC1070
Postat: 6 april 2007, 13:59:37
av opatagio
Tjenare
Som rubriken säger så har jag lite problem (eller snarare förvirrat bort mig själv) angående en CC1070 RF Transmitter. Den har stöd för SPI (4-wire) men dessa används för programmeringen av 1070 kretsen och själva data-överförningen i "transmit mode" ska, som jag uppfattat det, ske via ett I/O ben på MCU utöver de som används i SPI. Sedan ska även datan från detta I/O ben klockas med 1070 kretsens egna klockpulser (DCLK-pinnen). Det jag inte förstår är hur man ska föra över serialla datan med ett I/O ben från MCU samt hur denne ska tolka klockpulserna som kommer från 1070 och sedan se till att alla "timings" blir rätt.
På sidan 12 och 13 i CC1070 databladet kan man se vilka pinnar som används till vad. Sedan på sidan 17 i samma datablad står det hur det är tänkt att kopplas mot en MCU. Den biten som jag inte riktigt förstår.
Hastighet är inte det allra väsentligaste i mitt fall, då jag ämnar sända data ungefär var 5-10 minut till mottagaren.
MCU ifråga är en PIC 16F690 med EUSART och SPI (SSP) stöd. Datablad finns här
http://ww1.microchip.com/downloads/en/D ... 41262D.pdf
RF sändarkrets jag tänkt använda är TI CC1070. Datablad finns här
http://focus.ti.com/lit/ds/symlink/cc1070.pdf
Postat: 6 april 2007, 23:37:33
av sodjan
Du får tydligen en "klocka" från kretsen. Denna får du använda
i koden för att lägga ut bitar tillbaka till kretsen. Om du vill köra
pollat eller med interrupt beror mer på hur resten av din applikation ser ut.
Eller så finns det tydligen en "transparent UART mode" som inte använder
klocksignalen alls...
Postat: 7 april 2007, 18:15:46
av opatagio
Precis. Det som jag egentligen inte har klurat ut är hur man skiftar ut en byte. Att den ska skifta ut byten när det kommer en klocksignal på en I/O port är inga problem Det är snarare vilken metod man kan använda mjukarumässigt sett.
Postat: 7 april 2007, 20:24:20
av sodjan
Du har "värdet" som en byte i ett register.
Varje gång det kommer en "klocksignal" så gör du en "rotate with carry"
(åt ena eller det andra hållet beroende på i vilken ordning, LSB eller MSB
först, som modulen vill hs dom). Berende på C-flaggan så antingen sätter
eller clearar du data-pinnen. Piece of cake...
Komplettera med räknare och eventuelt några flaggor för att hålla
reda på hur många bitar du har shiftat ut och vad du håller på med
överhuvudtaget...
Postat: 8 april 2007, 18:20:40
av Matte
mjukvarumässigt sätt skulle jag göra precis som sodjan tänk dock på när du ska lägga ut data och när du ska toggla clockan. e ingen expert på pic men du har inte tillgång till två spi interface

du kan juh kasta in n mux oxå men om du bara ska skicka ibland o långsamt så kör me mjukvara ist.
Postat: 8 april 2007, 20:37:25
av opatagio
Har tyvärr inte 2 SPI lösningar på 16F690. Så det får bli mjukvarumässigt. Kommer köra så att jag roterar ut en bit åt vänster som sodjan föreslog (vänster eller höger beroende på cc1070 givetvis) sedan kollar jag när klockpulsen blir hög och sätter TX pinnen på MCU hög eller låg beroende på Carry-flaggan. Lade med en räknare så loopen avslutas efter alla 8 bitarna är skickade. Kommer dock på mottagar-MCUn att köra dennes RX pinne som interrupt. Så jag måste börja med en start bit från TX MCUn så RX MCU förstår när data är på väg för att sedan där börja skifta in datan.
Rätta mig gärna om jag tänker fel eller min logik är helt åt skogen.
Postat: 8 april 2007, 23:26:46
av sodjan
Eftersom du tänker i stort sett som jag så kan det ju inte vara helt åt skogen...

Postat: 9 april 2007, 11:28:15
av Matte
tog mig lite tid att kolla i data bladet och ny data läses in på possitiv clock flank alltså måste du lägga ut ny data på negativ flank.
din motagnings strategi kommer inte att fungera då ettor och nollor kommer att inträffa helt slumpmässigt då man inte sänder. det går heller inte bara att skicka data du måste ha ett protokoll för kommunikation samt hur bitarna skall se ut i luften.
härär ett förslag på ett protokoll
PREAMBLE = 0101010101.....typ 32 bitar för att synka sändare och mottagare, andvänder du NRZ kodning måste troligen PLL låsas innan preambln slutar.
NÄTVERKSADRSS, typ 16bitar med ett unikt kodord för ditt nätverk sedock till att sista biten på pramble måste vara samma som första biten i Nätverksadrssen för att motagaren skall veta att prambelen är slut. Detta är för att din motagarde inte skall ragera på alla sändare på samma freqvens band.
nästa fält bör vara Length där du kan ange hur långt paketet eller så andvändr du alltid en konstant längd.
nu kan du kasta in data + src,dest adress osv.
avsluta paktet med ett CRC fält för att detektera evetuella trasiga bitar i paketet.
jag vet att i databladet för CC1110 finns exempl och förklaringar på protokoll.
ett tips kan vara att köra manchester koding så slipper du låsa PLL du får halva hastigheten men slipper n massa strul.
I mottagaren får du sätta ett interupt på klockan och sen leta efter 25bitar korrekt preamble får du låsa PLL(NRZ) och sen då du får två lika bitar kan du gissa att preambelen är slut och nätverksadressen har börjat.
tänk oxå på att det är CC chippet som sändr klockan både i TX och RX.