Sida 2 av 2
Re: DMX512 Transmitter med AVR...
Postat: 21 april 2009, 14:52:14
av DeeJay_Bamse
JockeE: Men ett "Standard-Break"... Är det alltid en viss tid eller är är det så länge "Standard-Break"et är satt?
Finns "Standard-Break" i AVR? Hittar inget om det...
Re: DMX512 Transmitter med AVR...
Postat: 21 april 2009, 15:34:39
av JockeE
Jag vet inte hur andra mikrokontrollers hanterar break, men PIC:arna jag använder generar en breaksekvens med 12 nollbitar plus start- och stoppbit. Det går inte att påverka eller ändra på något sätt.
PIC-databladet kallar det för Break character sequence.
Re: DMX512 Transmitter med AVR...
Postat: 21 april 2009, 15:54:27
av Micke_s
Annat sätt att skapa break på är väl att skicka tecknet som ger låg nivå ut med lägre hastighet.
Det är ju sändare du bygger så timingen styr du.
start är ju låg så du behöver bara skicka ut data så den blir låg minst 88us.
Re: DMX512 Transmitter med AVR...
Postat: 21 april 2009, 16:35:19
av vfr
Helt rätt! Man får hålla lite koll bara när man skall byta baudrate. UART:ar kan vara lite kinkiga med byten av baudrate under sändning. Nu är det ju iofs fina pauser före och efter så det borde inte vara ett problem här. Möjligen då i slutet om man inte väntar in att UART:en hunnit sända klart innan man byter.
Re: DMX512 Transmitter med AVR...
Postat: 21 april 2009, 16:54:13
av B1n4ry
Varför krångla till det med att byta baud? Det är ju bara att stänga av TX i 88us och sedan slå på den igen. Toggla EN bit. Vänta. Toggla samma bit igen...
Jag har nog lite C-kod, kan lägga upp den ikväll när jag kommer hem...
//B1N4RY
Re: DMX512 Transmitter med AVR...
Postat: 21 april 2009, 17:03:10
av DeeJay_Bamse
B1N4RY: Japp.. Det låter som en bra lösning... C Exempel är trevligt...
Re: DMX512 Transmitter med AVR...
Postat: 21 april 2009, 18:54:51
av B1n4ry
Här kommer ett litet klipp från ett av mina projekt där jag sänder DMX
Kod: Markera allt
// Initiera UART
UCSR0A = UCSR0A | 0x02;
UCSR0A = 0x00;
UCSR0C = 0x0E;
UBRR0H = 0x00;
UBRR0L = 0x04;
for(;;)
{
/* Make Before Break */
UCSR0B = UCSR0B & 0xF7; /* Disable TX */
PORTD = PORTD | 0x02; /* Sätt PD1 = 1 */
_delay_us(90);
/* Break */
PORTD = PORTD & 0xFD; /* Sätt PD1 = 0 */
_delay_us(176);
/* Make After Break */
PORTD = PORTD | 0x02; /* Sätt PD1 = 1 */
_delay_us(15);
UCSR0B = UCSR0B | 0x08; /* Enable TX */
UDR0 = 0x00; /* Skicka Startbyte */
_delay_us(44);
for(n=1;n<=512;) /* Skicka alla kanaler */
{
UDR0 = dmxdata[n];
_delay_us(44);
++n;
}
}
Lite rörigt blev det när jag klistrade in men det är nog begripligt iaf.
Jag valde medvetet att använda delay mellan varje skickad byte eftersom
jag ville kunna provocera överföringen lite av testskäl i detta projektet.
Jag har gjort samma sak men väntat på "TX-ready" flaggan vad den nu heter men den koden hittar jag inte just nu... Eller så kan man ju köra med interrupt om man vill det, det har jag dock inte testat själv på AVR ännu...
//B1N4RY
Re: DMX512 Transmitter med AVR...
Postat: 21 april 2009, 20:51:58
av B1n4ry
Hittade en skärmdump på hur det blev oxå:
// B1N4RY
Re: DMX512 Transmitter med AVR...
Postat: 22 april 2009, 14:58:01
av DeeJay_Bamse
B1N4RY: Tackar.... Ser ut ungefär som jag funderade på... Det enda var att du skickar Make Before Break.. Behöver man verkligen den? Enligt spec så räcker det med Breaket och MakeAfterBreak...
Men tack så mycket... Kommer att änväda detta i en interrupt med TX-Ready.. Tackar ännu en gång...
Re: DMX512 Transmitter med AVR...
Postat: 22 april 2009, 15:02:41
av sodjan
> Det enda var att du skickar Make Before Break..
Syftar du på att signalen ligger hög innan break-perioden ?
Men det är den ju hela tiden i "idle", det inget som man "skickar"...
Re: DMX512 Transmitter med AVR...
Postat: 22 april 2009, 15:03:38
av DeeJay_Bamse
B1N4RY: Vad har du för att mäta signalen?? Program? Mätutrustning??
Re: DMX512 Transmitter med AVR...
Postat: 22 april 2009, 15:05:35
av DeeJay_Bamse
sodjan: Kollar du B1N4RYs kod så skickar han Mark Before Break innan Break......
Re: DMX512 Transmitter med AVR...
Postat: 22 april 2009, 15:09:11
av sodjan
OK, jag kollade bara bilden...

Sorry...
Re: DMX512 Transmitter med AVR...
Postat: 22 april 2009, 15:10:41
av B1n4ry
Jag tog med MBB eftersom jag behövde få ngt att funka snabbt som attan och den fanns med i specifikationen. Det funkar säkert utan men det spelar ingen roll i min tillämpning.
Mätningarna gjorde jag med mitt RIGOL oscilloscop...
DS1102D: 2ch, 100Mhz + 16 bitars logikanalysator
ca 10.000:- för ett år sedan drygt har jag för mig...
Mycket trevligt instrument...
//B1N4RY
Re: DMX512 Transmitter med AVR...
Postat: 22 april 2009, 15:13:04
av DeeJay_Bamse
Hm... En liten tanke... Skulle det inte gå att köra:
Kod: Markera allt
/* Break */
UCSR0B = UCSR0B & 0xF7; /* Disable TX */
PORTD = PORTD & 0xFD; /* Sätt PD1 = 0 */
_delay_us(176);
/* Mark After Break */
UCSR0B = UCSR0B | 0x08; /* Enable TX */
_delay_us(15);
UDR0 = 0x00; /* Skicka Startbyte */
/* Osv */
För det är la egentligen Lågsignal en viss tid och Högsignal (Idle) en viss tid som behövs... Alltså behöver man la inte sätta PD1 = 1 innan och efter = Idle....
sodjan: Lugnt...
B1N4RY: Lite över min kaliber kanske...
