DMX512 Transmitter med AVR...
-
- Inlägg: 61
- Blev medlem: 19 november 2007, 21:43:08
- Ort: Skövde
Re: DMX512 Transmitter med AVR...
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...
Finns "Standard-Break" i AVR? Hittar inget om det...
Re: DMX512 Transmitter med AVR...
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.
PIC-databladet kallar det för Break character sequence.
Re: DMX512 Transmitter med AVR...
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.
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...
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...
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
Jag har nog lite C-kod, kan lägga upp den ikväll när jag kommer hem...
//B1N4RY
-
- Inlägg: 61
- Blev medlem: 19 november 2007, 21:43:08
- Ort: Skövde
Re: DMX512 Transmitter med AVR...
B1N4RY: Japp.. Det låter som en bra lösning... C Exempel är trevligt...
Re: DMX512 Transmitter med AVR...
Här kommer ett litet klipp från ett av mina projekt där jag sänder DMX
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
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;
}
}
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
-
- Inlägg: 61
- Blev medlem: 19 november 2007, 21:43:08
- Ort: Skövde
Re: DMX512 Transmitter med AVR...
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...
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...
> 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"...
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"...
-
- Inlägg: 61
- Blev medlem: 19 november 2007, 21:43:08
- Ort: Skövde
Re: DMX512 Transmitter med AVR...
B1N4RY: Vad har du för att mäta signalen?? Program? Mätutrustning??
-
- Inlägg: 61
- Blev medlem: 19 november 2007, 21:43:08
- Ort: Skövde
Re: DMX512 Transmitter med AVR...
sodjan: Kollar du B1N4RYs kod så skickar han Mark Before Break innan Break......
Re: DMX512 Transmitter med AVR...
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
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
-
- Inlägg: 61
- Blev medlem: 19 november 2007, 21:43:08
- Ort: Skövde
Re: DMX512 Transmitter med AVR...
Hm... En liten tanke... Skulle det inte gå att köra:
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...
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 */
sodjan: Lugnt...

B1N4RY: Lite över min kaliber kanske...
