Lösning för att skicka ut en sekvens på ~1000 tal i följd?
Lösning för att skicka ut en sekvens på ~1000 tal i följd?
Hej
Jag har ett fall där jag skall skicka ut ett antal olika tal i följd (1000st) och där efter börja om från början. Jag har gjort detta med en atmel uprocessor och det funkade bra. Problemet är att det går för långsamt.
Det jag skulle vilja göra är att bygga en krets som håller tabellen i ett minne och som jag triggar på en ingång när det är dags att presentera nästa tal. En tanke jag haft är att designa detta med en FPGA. Min fundering är om det redan finns en krets för denna funktion färdigt?
Ideer mottages tacksamt.
//nboy
Jag har ett fall där jag skall skicka ut ett antal olika tal i följd (1000st) och där efter börja om från början. Jag har gjort detta med en atmel uprocessor och det funkade bra. Problemet är att det går för långsamt.
Det jag skulle vilja göra är att bygga en krets som håller tabellen i ett minne och som jag triggar på en ingång när det är dags att presentera nästa tal. En tanke jag haft är att designa detta med en FPGA. Min fundering är om det redan finns en krets för denna funktion färdigt?
Ideer mottages tacksamt.
//nboy
Senast redigerad av blueint 29 oktober 2013, 19:06:40, redigerad totalt 1 gång.
Anledning: var: Räknare
Anledning: var: Räknare
Re: Räknare
Hej och välkommen till forumet!
Läs gärna igenom det du skriver innan du postar och låtsas att du inte är insatt i det du pratar om
"Jag har ett fall där jag skall skicka ut ett antal olika tal i följd (1000st) och där efter börja om från början." - En smula (snarare väldigt mycket) obegripligt utan sammahang! Ta gärna med lite bakgrundsinformation också så man vet vad det handlar om, ibland kanske en helt annan lösning kan vara rätt väg att gå.
MVH: Mikael
Läs gärna igenom det du skriver innan du postar och låtsas att du inte är insatt i det du pratar om
"Jag har ett fall där jag skall skicka ut ett antal olika tal i följd (1000st) och där efter börja om från början." - En smula (snarare väldigt mycket) obegripligt utan sammahang! Ta gärna med lite bakgrundsinformation också så man vet vad det handlar om, ibland kanske en helt annan lösning kan vara rätt väg att gå.
MVH: Mikael
Re: Räknare
Hej och välkomen till EF!
Förrutom det som adent skriver så saknas det lite vesäntlig information. Talen som du ska "skicka ut", vad är det för typ av tal och hur/på vad ska de "skickas ut"? D.v.s. är det 8-bitarstal som ska ut på en serielina, är det 32-bitarstal som ska ut paralellt, ska de kanske ut som BCD? Det finns väldigt många olika sätt att "skicka ut" tal på, samt att talen kan vara av ett antal olika typer.
Hur ofta/med vilken frekvens, ska talen "skickas ut"?
Förrutom det som adent skriver så saknas det lite vesäntlig information. Talen som du ska "skicka ut", vad är det för typ av tal och hur/på vad ska de "skickas ut"? D.v.s. är det 8-bitarstal som ska ut på en serielina, är det 32-bitarstal som ska ut paralellt, ska de kanske ut som BCD? Det finns väldigt många olika sätt att "skicka ut" tal på, samt att talen kan vara av ett antal olika typer.
Hur ofta/med vilken frekvens, ska talen "skickas ut"?
Re: Räknare
Hej
Ja, det gick kanske lite fort.
Jag skall i slutändan skicka ut en sågtandsformad signal. Denna signal är en kalibrerad styrspänning till en fasskiftarkrets.
Frekvensen på sågtandssignalen vill jag styra med en vanlig signalgenerator(Fyrkant). Eftersom det kommer finnas ett stort antal olika sågtandsformer och jag måste kunna byt närsomhelst så tänker jag mig att dessa kurvformer ligger i ett minne som tabeller.
En tabell består av 1000 tal och varje tal är 12 bitar. Varje positiv flank från insignalen stegar kretsen som efterfrågas till nästa tal i tabellen. När tabellen har nått tabellvärde 1000 så återgår den till noll.
Alltså om jag skickar in en signal fyrkantssignal på 1kHz så ger det mig en sågtand på 1Hz.
Maximal frekvens på utsignalen skall var minimum 4kHz
Är det lite klarare nu vad jag efterfrågar?
Mvh nboy
Ja, det gick kanske lite fort.
Jag skall i slutändan skicka ut en sågtandsformad signal. Denna signal är en kalibrerad styrspänning till en fasskiftarkrets.
Frekvensen på sågtandssignalen vill jag styra med en vanlig signalgenerator(Fyrkant). Eftersom det kommer finnas ett stort antal olika sågtandsformer och jag måste kunna byt närsomhelst så tänker jag mig att dessa kurvformer ligger i ett minne som tabeller.
En tabell består av 1000 tal och varje tal är 12 bitar. Varje positiv flank från insignalen stegar kretsen som efterfrågas till nästa tal i tabellen. När tabellen har nått tabellvärde 1000 så återgår den till noll.
Alltså om jag skickar in en signal fyrkantssignal på 1kHz så ger det mig en sågtand på 1Hz.
Maximal frekvens på utsignalen skall var minimum 4kHz
Är det lite klarare nu vad jag efterfrågar?
Mvh nboy
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Räknare
Det hade nog gått alldeles utmärkt med en FPGA eller en lite kraftigare microkontroller, t ex Cortex-M3 eller liknande.
Maximala klockfrekvens som du ska läsa/skicka är med andra ord 4 MHz?
Maximala klockfrekvens som du ska läsa/skicka är med andra ord 4 MHz?
Re: Räknare
Hej
Jo det är helt korrekt. Det känns som en FPGA är som gjord för detta. Tyvärr har jag lite begränsade kunskaper vad gäller FPGA.
Det stämmer att 12 bit parallell bussen uppdaterats med maximalt 4MHz.
Det känns oxå lite överdrivet att ta till en FPGA för en så pass enkel operation, min huvud fråga är om det inte finns någon krets som kan detta redan eller nästan med lite modifikation.
mvh nboy
Jo det är helt korrekt. Det känns som en FPGA är som gjord för detta. Tyvärr har jag lite begränsade kunskaper vad gäller FPGA.
Det stämmer att 12 bit parallell bussen uppdaterats med maximalt 4MHz.
Det känns oxå lite överdrivet att ta till en FPGA för en så pass enkel operation, min huvud fråga är om det inte finns någon krets som kan detta redan eller nästan med lite modifikation.
mvh nboy
-
- Inlägg: 8228
- Blev medlem: 15 april 2006, 18:57:29
- Ort: Typ Nyköping
Re: Räknare
Vilken microcontroller som helst som har stöd för DMA klarar din uppgift enkelt.
Nu kommer de svåra frågorna.
Hur mycket sampel-jitter tål du?
Vad har du för insvängningstid på D/A omvandlaren och hur filtrerar du efter D/A omvandlaren?
Nu kommer de svåra frågorna.
Hur mycket sampel-jitter tål du?
Vad har du för insvängningstid på D/A omvandlaren och hur filtrerar du efter D/A omvandlaren?
Re: Räknare
chefenVad är det som kräver den höga upplösningen?
Jag har inte designat D/A omvandlaren än. Tidigare använde en processor med inbyggd D/A och det höll inte vare sig gitter eller insvängningstid.
Mvh nboy
Re: Räknare
En 10-bitars-räknare och ett (E)PROM eller flash-minne med lämpligt innehåll måste väl vara det absolut enklaste, så länge man inte ska ändra kurvformen alltför ofta (man kan ju ha ganska många tabeller att välja på i normalstora minneskapslar).
Re: Lösning för att skicka ut en sekvens på ~1000 tal i följ
Det finns dual-port RAM som kan användas om man vill.
Re: Lösning för att skicka ut en sekvens på ~1000 tal i följ
Ta en ARM7 eller dylikt i passande smak och kör denna kod, utrollad 1000 gånger.
Anpassa klockan efter vad du vill ha eller lägg in noppar.
r1 datatabell, r2 pekande på utporten.
ldr r0,[r1],#4
str r0,[r2]
ldr r0,[r1],#4
str r0,[r2]
ldr r0,[r1],#4
str r0,[r2]
ldr r0,[r1],#4
str r0,[r2]
Etc 1000 gånger.
Rätta mig om jag har fel, men LDR tar 3 och STR tar 2 på ARM7, så totalt 5 cykler / dataord.
Snabbare än så kan man inte göra det utan DMA eller att introducera jitter i dataströmmen.
Anpassa klockan efter vad du vill ha eller lägg in noppar.
r1 datatabell, r2 pekande på utporten.
ldr r0,[r1],#4
str r0,[r2]
ldr r0,[r1],#4
str r0,[r2]
ldr r0,[r1],#4
str r0,[r2]
ldr r0,[r1],#4
str r0,[r2]
Etc 1000 gånger.
Rätta mig om jag har fel, men LDR tar 3 och STR tar 2 på ARM7, så totalt 5 cykler / dataord.
Snabbare än så kan man inte göra det utan DMA eller att introducera jitter i dataströmmen.
Re: Lösning för att skicka ut en sekvens på ~1000 tal i följ
Googla på wavetable.
Som sm5tfx skriver, ett minne (på 12 bitar och 1K "word" per sågtandsprofil, så det blir troligen två a' 8 bit där fyra inte används), en 10 bitars räknare (1024 "tal") på adresslinje A0 - A9 och en 12 bits D/A, adress A10 och uppåt används för att välja vågform.
Allt finns som färdiga kretsar och du behöver inte fundera på jitter mm.
Om du inte har behov av att ladda in nya vågformer behövs inte ens en CPU/MCU för att ladda minnet, då kan du ha valfri typ av "ROM" minne.
Det du inte nämner är om du behöver filtrera bort kvantifieringbruset men kanske är 1000 ggr sampling och 10 bitar tillräckligt för att komma under/över brus och frekvens respons i det styrda systemet? (dvs. det styrda systemet har en respons som har inbyggd "filter karaktär").
Lycka till!
Som sm5tfx skriver, ett minne (på 12 bitar och 1K "word" per sågtandsprofil, så det blir troligen två a' 8 bit där fyra inte används), en 10 bitars räknare (1024 "tal") på adresslinje A0 - A9 och en 12 bits D/A, adress A10 och uppåt används för att välja vågform.
Allt finns som färdiga kretsar och du behöver inte fundera på jitter mm.
Om du inte har behov av att ladda in nya vågformer behövs inte ens en CPU/MCU för att ladda minnet, då kan du ha valfri typ av "ROM" minne.
Det du inte nämner är om du behöver filtrera bort kvantifieringbruset men kanske är 1000 ggr sampling och 10 bitar tillräckligt för att komma under/över brus och frekvens respons i det styrda systemet? (dvs. det styrda systemet har en respons som har inbyggd "filter karaktär").
Lycka till!
Re: Lösning för att skicka ut en sekvens på ~1000 tal i följ
Super tack för alla svar. Det är precis de svar jag söker.
Mvh nboy
Kan du utveckla detta lite till? Jag har inte jobbat med nån räknare förut. Har du något förslag på krets och minne?Som sm5tfx skriver, ett minne (på 12 bitar och 1K "word" per sågtandsprofil, så det blir troligen två a' 8 bit där fyra inte används), en 10 bitars räknare (1024 "tal") på adresslinje A0 - A9 och en 12 bits D/A, adress A10 och uppåt används för att välja vågform.
Mvh nboy
Re: Lösning för att skicka ut en sekvens på ~1000 tal i följ
Hej
Tack för era tips. Jag nästa skäms över att jag inte kom på denna lösning själv. Jag kommer att bygga med counter till minne till DAC. Tusen tack EF.
Mvh nboy
Tack för era tips. Jag nästa skäms över att jag inte kom på denna lösning själv. Jag kommer att bygga med counter till minne till DAC. Tusen tack EF.
Mvh nboy