Sida 1 av 2

DMX512 Transmitter med AVR...

Postat: 21 april 2009, 09:42:49
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)

Re: DMX512 Transmitter med AVR...

Postat: 21 april 2009, 10:02:40
av vfr
Break är ett standardförfarande på asynkron seriekommunikation och borde stå just som det i databladet.

Re: DMX512 Transmitter med AVR...

Postat: 21 april 2009, 10:37:32
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

Re: DMX512 Transmitter med AVR...

Postat: 21 april 2009, 11:18:44
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å.

Re: DMX512 Transmitter med AVR...

Postat: 21 april 2009, 12:03:42
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.

Re: DMX512 Transmitter med AVR...

Postat: 21 april 2009, 12:39:42
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??

Re: DMX512 Transmitter med AVR...

Postat: 21 april 2009, 12:57:46
av vfr
Nej, inga start/stop-bitar.

Re: DMX512 Transmitter med AVR...

Postat: 21 april 2009, 13:03:59
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.

Re: DMX512 Transmitter med AVR...

Postat: 21 april 2009, 13:04:51
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.

Re: DMX512 Transmitter med AVR...

Postat: 21 april 2009, 13:11:26
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å.

Re: DMX512 Transmitter med AVR...

Postat: 21 april 2009, 13:16:25
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...

Re: DMX512 Transmitter med AVR...

Postat: 21 april 2009, 13:19:06
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....

Re: DMX512 Transmitter med AVR...

Postat: 21 april 2009, 13:22:34
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....

Re: DMX512 Transmitter med AVR...

Postat: 21 april 2009, 13:30:45
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.

Re: DMX512 Transmitter med AVR...

Postat: 21 april 2009, 13:45:37
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... :-)