DMX512 Transmitter med AVR...

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
DeeJay_Bamse
Inlägg: 61
Blev medlem: 19 november 2007, 21:43:08
Ort: Skövde

DMX512 Transmitter med AVR...

Inlägg av DeeJay_Bamse »

Sitter och funderar lite på en DMX sändare...
Men funderar lite hur man löser ett BREAK?
Dvs signalen innan första sendbyte.
Om man inte skickar något så är ju signalen hög, men BREAK är låg och MINST 88us lång.
Och sedan kommer 8us MAB som är hög innan man börjar skicka alla byten...

Finns det något i AVRs UART som sätter utgången låg? Eller måste man stänga av UARTen och dra pinnen direkt??

Jo jag vet att man säkert kan se i PDFen för tex Mega32 hur man gör om det finns.. Men vet inte vad det heter och därför inte vad jag skall leta efter....

Idéer eller om någon löst detta så i C så vore jag intresserad av lite kod så man kan se hur man gjort..

Bild för att visa vad jag menar...
Bild
Bilden är lånad direkt från en hemsida..... (Inte min)
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: DMX512 Transmitter med AVR...

Inlägg av vfr »

Break är ett standardförfarande på asynkron seriekommunikation och borde stå just som det i databladet.
B1n4ry
EF Sponsor
Inlägg: 1327
Blev medlem: 30 november 2005, 20:02:50
Ort: Borås
Kontakt:

Re: DMX512 Transmitter med AVR...

Inlägg av B1n4ry »

Enligt säkra källor så är det enda sättet att just stänga av UARTen och sätta pinnen manuellt.
Som jag förstått det så är DMX break är inte riktigt samma sak som RS232 Break...

Jag göra så i min kod att jag stänger av och sätter pinnen manuellt och det fungerar kanon.

//B1N4RY
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: DMX512 Transmitter med AVR...

Inlägg av vfr »

Ok. Då är det ju lite dumt att dom kallar det just "break" när det dessutom är asynkron seriekommunikation. Visst, det är förklarat med tid och allting, men det är ändå lätt att missta det för ett vanligt seriebreak när dom uttryckt sig så.
Användarvisningsbild
JockeE
Inlägg: 330
Blev medlem: 4 augusti 2004, 08:46:50

Re: DMX512 Transmitter med AVR...

Inlägg av JockeE »

Nu vet jag inte hur det är på AVR, men jag har kommit på en bra grej som jag nu utnyttjar på PIC.
En del PIC:ar har möjligheten att invertera polariteten hos UART:en, vilket innebär att idle kan läggas på låg nivå. Det är bara att invertera polariteten under BREAK-perioden och sedan växla tillbaka igen.
Mycket smidigt. Men jag har inte sett någon annan som utnyttjat detta, så den funktionaliteten kanske inte är så vanlig.
DeeJay_Bamse
Inlägg: 61
Blev medlem: 19 november 2007, 21:43:08
Ort: Skövde

Re: DMX512 Transmitter med AVR...

Inlägg av DeeJay_Bamse »

vfr: Det med asynkron serie........ Vad gör den där då?? Den sätter bara utgången låg va?? För det är ju det den skall.... Tiderna är ju inte så viktiga.. Bara den är mellan min-max... För den skickar inte några start eller stopbitar eller liknande skit eller??

JockeE: Vad heter det på PIC då?? Så jag kan titta efter det....

B1N4RY: Har du något skrivet i C som skickar DMX som du har lust att visa lite??
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: DMX512 Transmitter med AVR...

Inlägg av vfr »

Nej, inga start/stop-bitar.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: DMX512 Transmitter med AVR...

Inlägg av sodjan »

Det verkar som att det är de nyare EUSART som har BREAK hantering inbyggt.
Se t.ex "12.3.3 BREAK CHARACTER SEQUENCE" i databladet för 16F88x serien.
Dock så är det tveksamt om timingen stämmer överens med DMX-specen.
Det är även EUSART som kan invertera TX, se SCKP biten.
Användarvisningsbild
JockeE
Inlägg: 330
Blev medlem: 4 augusti 2004, 08:46:50

Re: DMX512 Transmitter med AVR...

Inlägg av JockeE »

Databladet säger:
TXCKP: Clock and Data Polarity Select bit
Asynchronous mode:
1 = Idle state for transmit (TX) is a low level
0 = Idle state for transmit (TX) is a high level

Jag tror att en "standard-break" är 12 bit lång, och därför inte tillräcklig för DMX512.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: DMX512 Transmitter med AVR...

Inlägg av vfr »

Break enligt asynkron seriestandard har jag för mig brukar definieras som minst så lång att det genererar ett framing error på en mottagande UART. Det skulle ju kunna bli minimum 12 bitar isåfall om man har 11 bitars ordlängd. Annars tror jag inte det är så vanligt att UART:en egentligen bestämmer tiden, utan bara att det finns möjlighet att sätta "breaknivå" och sedan får man göra det så länge man själv tycker är lämpligt. Men det finns säkert UART:ar med stöd för timingen också.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: DMX512 Transmitter med AVR...

Inlägg av sodjan »

> Databladet säger...

*Vilket* datablad ? Vilken variant av USART ? (USART/AUSART/EUSART ?)

> Jag tror att en "standard-break" är 12 bit lång, och därför inte tillräcklig för DMX512.

Det stämmer med EUSART i de PIC's som har den (alltså EUSART).

> Men det finns säkert UART:ar med stöd för timingen också.

Japp, helautomatiskt i ESUART...
DeeJay_Bamse
Inlägg: 61
Blev medlem: 19 november 2007, 21:43:08
Ort: Skövde

Re: DMX512 Transmitter med AVR...

Inlägg av DeeJay_Bamse »

Men en "StandardBreak" är 88us till 1s långt enligt spec....
Så kan man bara sätta den till lågt med invertering eller stänga av så fungerar det bara det är MINST 88us långt...
Men Invertering fanns la bara på PIC för jag har inte hittat något om det i AVRs PDF...
Eller ja.. TXCKP kanske man kan dra ner lite i minst 88us så får man ju Låg signalen....
Frågan är ju hur snabb den är... Om det kommer direkt eller efter nästa avslutad byte....
DeeJay_Bamse
Inlägg: 61
Blev medlem: 19 november 2007, 21:43:08
Ort: Skövde

Re: DMX512 Transmitter med AVR...

Inlägg av DeeJay_Bamse »

vfr: Tänkte nästan det... Skall prova så fort som möjligt.. (Typ innan helgen...)

Någon som har något bra knep för att får en us paus i C program?? Dvs
Program:
Sätta Idle = LOW
Vänta 88us
Sätta Idle = HIGH
Vänta 8us
Skicka DMXdata....
Användarvisningsbild
JockeE
Inlägg: 330
Blev medlem: 4 augusti 2004, 08:46:50

Re: DMX512 Transmitter med AVR...

Inlägg av JockeE »

sodjan: Jag vet inte om du tolkade mitt inlägg som ett svar på ditt inlägg. Det var inte tänkt så i alla fall, jag tror vi postade samtidigt.
Vilket datablad det rör sig om spelar nog ingen roll för DeeJay_Bamse, han ville bara veta vilket begrepp han skulle söka efter. Men om det är viktigt att veta, så är det PIC18F2525/2620/4525/4620 och dessa har EUSART.

Det jag menade med "standard-break" var alltså det tillstånd som skapar framing error i "vanliga" RS232-sammanhang, det har inget med DMX512 att göra. Jag ville bara påpeka att 12 bit inte är tillräckligt långt för att uppfylla ≥88µs-kravet.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: DMX512 Transmitter med AVR...

Inlägg av sodjan »

> Men om det är viktigt att veta...

Ja, det är det väl alltid.

> ...så är det PIC18F2525/2620/4525/4620 och dessa har EUSART.

Aha! Jag hade rev C av databladet och där står det :

> SCKP: Synchronous Clock Polarity Select bit
> Asynchronous mode:
> Unused in this mode.

I det senate (rev E) står det som du citerade... :-)
Det var därför jag inte hittade TXCKP... :roll:

Nu tillbaka till DMX... :-)
Skriv svar