dies ist mein erster Beitrag., einem herzlichen Gruß an alle Mitglieder des Forums., wie im Titel ausgerichtet. Ich versuche, meine Zusammenstellung hinzufügen., Fader allgemeinen und Strobe- I an die Mitglieder des Forum gelesen http://www.ledstyles.de/index.php/User/3047-Pesi/ mit ihren Anwendungen in ASM., aber ich habe nichts davon gemeistert Ich lese auch ein http://www.ledstyles.de/index.php/User/2926-turi/ mit seinen coole Anwendungen DMX., auf der Basis der Bibliotheken in der Programmiersprache C ., Hendrik Hölscher meine Programmier Anfänger., auch Bibliotheken von C-Sprache-Adresse Ich teile meine Zusammenstellung funktioniert perfekt., Bereits in der atmega 8515. bewiesen, passiert mir Probleme, wenn sie versuchen, um die Fade und Strobe hinzuzufügen., ist, dass ich blockiert den Empfang des Signals (Fehler DMX) Ich verlange von euch die Führung, erfolgreich zu erreichen. Da die Internet-Tutorials sind sehr unterschiedlich, wenn es um das DMX-Signal kommt ob die PWM zu ändern., so dass nicht., ich bin einverstanden. sowie der Timer und dessen Konfiguration.,
#include <avr/wdt.h>
#include "lib_dmx_in.h"
#include "lib_indicator.h"
uint8_t count= 1; // Counter for soft PWM
uint8_t IndCnt= 1; // Counter for LED indicator
uint8_t DmxBuf[DMX_CHANNELS];
void init_system(void)
{
//Watchdog
wdt_reset();
wdt_enable(WDTO_500MS); //enable watchdog (Timeout= 0.5s)
wdt_reset();
//Ports
DDRB |= (1<<PB0) | (1<<PB1) | (1<<PB2);
PORTB= 0;
DDRD= 0b10000110; //DMX, spare, LED1
PORTD= 0b01111010;
//Timer0
TCCR0= (1<<CS02);
TIMSK= (1<<TOIE0);
init_DMX(); // Initialize DMX channels
init_ind(); // Initialize LED indicator
}
int main(void)
{
cli();
init_system();
sei();
int PWM_timer;
while(1)
{
for (PWM_timer=0; PWM_timer<255 ; PWM_timer++) // Timer applied right through a series of fill
{
if (DmxRxField[0]>PWM_timer) //red
{
PORTB &= ~(1<<PB0); //LED OFF
}else{
PORTB |= (1<<PB0); //LED ON
}
if (DmxRxField[1]>PWM_timer) //green
{
PORTB &= ~(1<<PB1); //LED OFF
}else{
PORTB |= (1<<PB1); //LED ON
}
if (DmxRxField[2]>PWM_timer) //blue
{
PORTB &= ~(1<<PB2); //LED OFF
}else{
PORTB |= (1<<PB2); //LED ON
}
if (Flags &(1<<EVAL_DMX)) // DMX universe was refreshed
{
Flags &= ~(1<<EVAL_DMX);
IndFlags |= (1<<VALID_DMX); // Valid DMX signal arrived
uint8_t i;
for (i=0; i<DMX_CHANNELS; i++)
{
if (DmxRxField[i] != DmxBuf[i]) // A DMX value has changed?
{
DmxBuf[i]= DmxRxField[i];
IndFlags |= (1<<DATA_REFRESHED); // Yes -> blink!
}
}
}
}
if (Flags &(1<<IND)) // LED indicator, DIPs
{
Flags &= ~(1<<IND);
wdt_reset(); //reset watchdog
get_dips();
if (--IndCnt == 0)
{
IndCnt= 8;
indicate();
}
}
}
}
// *************** Soft PWM ****************
ISR (TIMER0_OVF_vect)
{
if (count == 0xFF)
{ // Called with 122Hz
count= 1;
Flags |= (1<<IND);
}
else count++;
}
Alles anzeigen