3 eller 6 PWM utgångar på en Avr ATMega32 och DMX512 in...

Planering och tankar kring eventuella framtida projekt.
DeeJay_Bamse
Inlägg: 61
Blev medlem: 19 november 2007, 21:43:08
Ort: Skövde

3 eller 6 PWM utgångar på en Avr ATMega32 och DMX512 in...

Inlägg av DeeJay_Bamse »

Sitter här med papprena på ATMega32an och det står att den har 4 PWM utgångar... Skulle behöva 3 eller 6st 8Bit PWM...
Någon som har ett bra litet exempel på hur man får igång dem och hur man använder dem...
Är som sagt MYCKET ringrostig på microprosesorer så snälla skriv inte att jag skall läsa i papprena eller söka på nätet..

Det är till 1 eller 2 RGB utgångar för lysdioder....

Just det... Även om någon har kommit på ett bra sätt att ta emot DMX512 signaler... Hittat lite men de verkade inte 100% näjda med sina lösningar...
Användarvisningsbild
Stinrew
Inlägg: 954
Blev medlem: 20 augusti 2006, 03:14:41
Ort: Motala
Kontakt:

Inlägg av Stinrew »

Vilket språk har du tänkt skriva i, C eller asm?
DeeJay_Bamse
Inlägg: 61
Blev medlem: 19 november 2007, 21:43:08
Ort: Skövde

Inlägg av DeeJay_Bamse »

Glömde att skriva det ja.....
C hade jag tänkt mig....
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

Hårdvaran räcker det väl med RS485 mottagare och DC/DC kloss.
valfri RS485 och en ADUM5240, eftersom du bara ska ta emot så går det inte så mycket effekt.
DeeJay_Bamse
Inlägg: 61
Blev medlem: 19 november 2007, 21:43:08
Ort: Skövde

Inlägg av DeeJay_Bamse »

Jo att det är RS485 men har någon löst själva avkodningen...
Dvs vart första byten är osv... Det är ju en speciell signal innan första byten då de 1 lägger en viss tid... Hur kollar man av det lättast? Någon som löst det??
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Är det lysdioder du ska blinka med så räcker det med semi-automagisk PWM, d.v.s. styrt av timeravbrott. Du får då 8 bitar i 100 Hz utan problem.
DeeJay_Bamse
Inlägg: 61
Blev medlem: 19 november 2007, 21:43:08
Ort: Skövde

Inlägg av DeeJay_Bamse »

Micke_s: Tackar... Bra info där..... Löser nog den biten... Har inte hunnit läsa allt än men hoppas det tar upp de 88us höga signalen....

$tiff: Är det 6 utgångar du pratar om då?? Ja lysdioder är det.. Är ju inte hundra om det blir exakt... Bara det inte flimrar... Skulle helst vilja komma upp i högre frekvens pga filmkameror... 400Hz är målet men inget måste..

Är en liten fundering som jag inte vet om det fungerar:
om man har en 8bit timer som räknar tex 400*256 gånger i sekunden och sedan ligger main loopen och kollar tex 9 byte om de är högre än timern så drar de en utgång... Skulle det fungera?? Med en DMX ingång igång eller blir det för mycket arbete för en 16MHz Avr ATMega32?? Förstår någon tankesättet och kan svara på om det fungerar??
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Inlägg av SvenW »

Om jag fattar rätt så finns det 160 klockcykler för att göra 9 jämförelser. Inga problem så länge det inte finns några avbrottsrutiner som går in och stör.
Metoden ger inte speciellt rena PWM-signaler, men för att driva lysdioder så duger det säkert.
Användarvisningsbild
Maze
Inlägg: 435
Blev medlem: 8 juni 2004, 18:49:29
Ort: Göteborg

Inlägg av Maze »

Gör ett interrupt varje gång en byte kommer in från UARTen. I denna har du en variabel som räknar antalet byte som kommer in. När denna är lika med enhetens address tar du emot så många byte som behövs i applikationen. Sen väntar du på att nästa runda börjar och nollställer variablen. Att en ny runda har startat upptäcker du genom att du får en byte som saknar stoppbit vilket de flesta UARTar har en flagga för.

För att styra många lysdioder med en uC så är PWM inte den effektivaste metoden som finns. Det krävs att du räknar upp PWM räknaren och jämför alla utgångars värde med ett kontstant intervall. Både uppdateringsfrekvensen och antalet nivåer är sen funktioner av hur korta dessa intervall är vilket gör att processorn inte hinner med så mycket mer till slut.

Kolla istället på något som kallas för diskret eller binär PWM där moduleringen sker direkt av de bitar som utgör intensiteten för dioden. Tiden som varje bit läggs ut på utgången viktas sen beroende på dess signifikans. Den minst signifikanta biten läggs ut på utgången så kort tid som möjligt. Sen läggs nästa bit ut under dubbelt så lång tid och nästa bit under fyra gånger så lång tid osv. Detta gör att processorn bara får mycket att göra precis i början för att sen avta. De flesta UARTar har ofta ett litet FIFO så moduleringen kan troligtvis ha högsta prioritet och sen kan inkommande byte tas omhand när tiden mellan uppdateringar av utgångarna ökar.
DeeJay_Bamse
Inlägg: 61
Blev medlem: 19 november 2007, 21:43:08
Ort: Skövde

Inlägg av DeeJay_Bamse »

Maze: Tack för ideerna... Att UARTen saknar stopbit verkar bra... Hur lång tid behöver den för att den skall sakna det då? För det är la aldrig så att den får nästa byte direkt efter??

Måste nog säga att jag inte har 100 koll på hur PWM fungerar i praktiken med AVR... Det står ju att den skall ha 4 PWM utgångar... Skriver man inte in Frekvensen och sedan hur många % det skall vara hög eller låg signal?? Eller måste den göra en massa uträkningar själv hela tiden?

Ang Räknare... Går det att få en 8bit räknare som räknar 400*256ggr/s... Går det att få ett avbrott varje gång den räknar för att jämföra 6 eller 9 tal med räknaren för att lägga ut svaret på en pinne?? Med tanke på hastigheten så gör det nog inget om den tappar lite ibland... Det är ju ändå 400ggr/s som den tänder och släcker.. Det fattar la inte ögat.....
Skriv svar