32 bitars skiftregister
-
- Inlägg: 15901
- Blev medlem: 21 juni 2003, 21:26:56
- Ort: Väster om Lund (0,67 mSv)
32 bitars skiftregister
hej
Jag vill läsa av en digital signal , 32 bitar lång. Den har en klockfrekvens om ca 3-5MHz så det är lite snålt att göra det med en CPU direkt, även om man kör via SPI och interrupt tror jag.
alltså skulle jag gärna vilja ha en IC - skiftregister om 32 bitar , och som man sedan kan läsa ut data ur i långsammare takt.
Det går givetvis att seriekoppla XX595 eller liknande logikkretsar men det är lite ont om plats att montera CPU kortet som läser av detta.
Varje sekvens om 32 bitar kommer inte så ofta, max 10 ggr / sekund.
Jag vill läsa av en digital signal , 32 bitar lång. Den har en klockfrekvens om ca 3-5MHz så det är lite snålt att göra det med en CPU direkt, även om man kör via SPI och interrupt tror jag.
alltså skulle jag gärna vilja ha en IC - skiftregister om 32 bitar , och som man sedan kan läsa ut data ur i långsammare takt.
Det går givetvis att seriekoppla XX595 eller liknande logikkretsar men det är lite ont om plats att montera CPU kortet som läser av detta.
Varje sekvens om 32 bitar kommer inte så ofta, max 10 ggr / sekund.
- Swech
- EF Sponsor
- Inlägg: 4750
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: 32 bitars skiftregister
http://swechtrading.se/zencart/index.ph ... ucts_id=30
4 st i serie skulle funka
Eller köra med 1 och läsa 4 gånger per sekvens
Swech
4 st i serie skulle funka
Eller köra med 1 och läsa 4 gånger per sekvens
Swech
Re: 32 bitars skiftregister
Vad är det för processor, inte så att du kan optimera interruptet med lite assembler.
Edit: Du måste fortfarande räkna dina 32bitar, förvisso så kan du kanske fixa det med en timer.
Edit2: annars så kanske du kan använda 595 som mellanlager och klocka denna med en or grind i lungn och ro till processorn:s spi.
Edit3: Annan lösning ta en attiny25 eller liknande och lagra alla bitar i hårdvaruregister, då bör du kunna komma undan med väldigt lite assember. har du plats för en SO8?
Edit: Du måste fortfarande räkna dina 32bitar, förvisso så kan du kanske fixa det med en timer.
Edit2: annars så kanske du kan använda 595 som mellanlager och klocka denna med en or grind i lungn och ro till processorn:s spi.
Edit3: Annan lösning ta en attiny25 eller liknande och lagra alla bitar i hårdvaruregister, då bör du kunna komma undan med väldigt lite assember. har du plats för en SO8?
Re: 32 bitars skiftregister
Att få in det hela i processorn direkt känns onekligen som den bästa lösningen. Är det bithastigheten i förhållande till CPU:ns klocka du är orolig för, eller är det att hinna med att skyffla undan bytarna? (utan att veta vilken CPU som är aktuell är det svårt att bedöma den första punkten)
Är det det senare så finns det ju flera lösningar. En kan ju vara att strunta i interrupt och polla direkt. 32 bitar vid 3 MHz motsvarar 10 us. Om det inte finns någon häftig realtid inblandad så borde du kunna acceptera att ha interrupten avstängda under den tiden.
Är det det senare så finns det ju flera lösningar. En kan ju vara att strunta i interrupt och polla direkt. 32 bitar vid 3 MHz motsvarar 10 us. Om det inte finns någon häftig realtid inblandad så borde du kunna acceptera att ha interrupten avstängda under den tiden.
Re: 32 bitars skiftregister
Det skulle vare möjligt att ordna med en PIC på 20MHz, man måste dock nog ha en ganska tight ISR som kollar om det finns ytterligare ett interrupt innan den avslutar.
Re: 32 bitars skiftregister
> Jag vill läsa av en digital signal , 32 bitar lång.
Beskriv denna "signal" bättre !
Är den "self-clocking" eller finns det en separat klocka ?
Har du någon dokumentation över "signalen" ?
Beskriv denna "signal" bättre !
Är den "self-clocking" eller finns det en separat klocka ?
Har du någon dokumentation över "signalen" ?
-
- Inlägg: 15901
- Blev medlem: 21 juni 2003, 21:26:56
- Ort: Väster om Lund (0,67 mSv)
Re: 32 bitars skiftregister
signalen är synkron
det finns en klocksignal
det finns en datasignal
och det finns en "strobe" signal, normalt låg (0V) . Efter 32 klockpulser går strobesignalen låg-hög-låg . strobesignalen latchar in data i ett register.
Det finns beskrivet överst på sid 5 i :
http://user.faktiskt.se/rikkitikkitavi/TC9459F.pdf
Jag vill alltså läsa av datasignalerna till chipet.
(chipet styrs egentligen av 24 bitar, men flera liknande chip sitter på samma databuss och data sginalen är 32 bitar etc)
Hål i huvudet:
Jag har räknat fel på klockhastigheten. Klockhastigheten är max 1 MHz, strobesignalen är > 0,5 uS (men det kan man lösa mha en vippa ) vilket man ser överst på sid 7.
Det kanske går att trycka in i en AVR mha assembler och SPI interface mha interupt. 4 bytes som kommer med 1 MHz, jag har alltså 8 uS att buffra undan varje byte.
Sedan händer inte mycket förrän nästa datatransmission kommer och det är enligt min bedömning maximalt 10 / sekund. Hur ofta ändrar man volymen i en förstärkare eller vilken ingång man lyssnar?
Det enda jag skall göra i övrigt i programmet är att läsa av volymdata (en byte / kanal) , skala om detta och skicka ut det som SPI data på en annan port.
det finns en klocksignal
det finns en datasignal
och det finns en "strobe" signal, normalt låg (0V) . Efter 32 klockpulser går strobesignalen låg-hög-låg . strobesignalen latchar in data i ett register.
Det finns beskrivet överst på sid 5 i :
http://user.faktiskt.se/rikkitikkitavi/TC9459F.pdf
Jag vill alltså läsa av datasignalerna till chipet.
(chipet styrs egentligen av 24 bitar, men flera liknande chip sitter på samma databuss och data sginalen är 32 bitar etc)
Hål i huvudet:
Jag har räknat fel på klockhastigheten. Klockhastigheten är max 1 MHz, strobesignalen är > 0,5 uS (men det kan man lösa mha en vippa ) vilket man ser överst på sid 7.
Det kanske går att trycka in i en AVR mha assembler och SPI interface mha interupt. 4 bytes som kommer med 1 MHz, jag har alltså 8 uS att buffra undan varje byte.
Sedan händer inte mycket förrän nästa datatransmission kommer och det är enligt min bedömning maximalt 10 / sekund. Hur ofta ändrar man volymen i en förstärkare eller vilken ingång man lyssnar?
Det enda jag skall göra i övrigt i programmet är att läsa av volymdata (en byte / kanal) , skala om detta och skicka ut det som SPI data på en annan port.
Senast redigerad av rikkitikkitavi 11 april 2010, 18:33:15, redigerad totalt 1 gång.
Re: 32 bitars skiftregister
Eftersom att SPI-modulen (väl?) lagrar 8 bitar innan interrupt borde ju processorn ha 8 us på sig att spara en byte.
Re: 32 bitars skiftregister
> jag har alltså 1 uS att buffra undan varje byte.
Antingen "jag har alltså 1 uS att buffra undan varje bit"
eller "jag har alltså 8 uS att buffra undan varje byte"...
Antingen "jag har alltså 1 uS att buffra undan varje bit"
eller "jag har alltså 8 uS att buffra undan varje byte"...
-
- Inlägg: 15901
- Blev medlem: 21 juni 2003, 21:26:56
- Ort: Väster om Lund (0,67 mSv)
Re: 32 bitars skiftregister
har visst vissa beräkningsproblem idag ockås...
1uS per bit, 8 uS per byte , och 10MHz klocka ger 80 klockcykler att flytta SPI bufferten till en minnesadress.
1uS per bit, 8 uS per byte , och 10MHz klocka ger 80 klockcykler att flytta SPI bufferten till en minnesadress.
Re: 32 bitars skiftregister
Kör du en AVR på 20 MHz så har du 160 instruktioner på dig för varje byte du ska stuva undan. Det klarar du utan problem med assembler. Skulle t.o.m fungera i C om du helst inte använder interrupt - med interrupt riskerar du ganska mycket tidsspill när den ska stuva undan alla register vid anrop av interruptet. Byte två får ju inte ha kommit in innan du lästa av första biten. "strobe"-signalen är väl det minsta problemet - när den kommer har du ju all tid i världen på dig att göra vad du vill. Du skulle t.o.m klara dig utan stroben - om det är en lång paus mellan bytena så vet du att du ska vara beredd på en ny omgång. Sen när de börjar komma in så läser du in exakt 5 st. (fast den måste hoppa ur om det skulle bli ett avbrott mitt i) Eftersom du sedan vet att det inte kommer fler behöver du inte någon strobe.4 bytes som kommer med 1 MHz, jag har alltså 8 uS att buffra undan varje byte.