Sida 1 av 1

32 bitars skiftregister

Postat: 9 april 2010, 21:11:32
av rikkitikkitavi
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.

Re: 32 bitars skiftregister

Postat: 9 april 2010, 21:17:02
av Swech
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

Re: 32 bitars skiftregister

Postat: 9 april 2010, 21:30:07
av Micke_s
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?

Re: 32 bitars skiftregister

Postat: 10 april 2010, 10:53:53
av Jonas L
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.

Re: 32 bitars skiftregister

Postat: 10 april 2010, 11:38:18
av Icecap
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

Postat: 10 april 2010, 14:22:35
av sodjan
> 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" ?

Re: 32 bitars skiftregister

Postat: 11 april 2010, 17:06:08
av rikkitikkitavi
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.

Re: 32 bitars skiftregister

Postat: 11 april 2010, 17:33:08
av bearing
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

Postat: 11 april 2010, 17:47:12
av sodjan
> 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"...

Re: 32 bitars skiftregister

Postat: 11 april 2010, 18:37:56
av rikkitikkitavi
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.

Re: 32 bitars skiftregister

Postat: 11 april 2010, 22:01:46
av Micke_s
Du kan alltid köra strobe signalen på ett externt interrupt.

Re: 32 bitars skiftregister

Postat: 12 april 2010, 00:48:10
av jesse
4 bytes som kommer med 1 MHz, jag har alltså 8 uS att buffra undan varje byte.
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.