[Info]
Aktuelle Zeit: Mo 20. Nov 2017, 16:36

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: RGB-Lampe mit Fernsteuerung
BeitragVerfasst: So 23. Apr 2017, 14:30 
Offline

Registriert: Di 8. Jun 2010, 18:55
Beiträge: 762

Spezialgebiet: Normen
Schule/Uni/Arbeit: F&E Elektronik
Hi allerseits,

lang ist es her, dass ich mich wirklich aktiv in der Elektronik-Bastelei betätigt habe, aber nach dem zweiten und für die nächsten Jahre hoffentlich letzten Umzug
habe ich endlich wieder die Motivation gefunden, etwas zu machen. Tut irgendwie gut ;)
Los geht's! Da mein Schreibtisch unter einer Dachschräge steht, ist das Licht zum Arbeiten suboptimal -> eine "schöne" Lampe muss her.
Der Schwabe in mir will dem passenden Designer-Objekt aber keine Hundert € nachwerfen, also wird das selber gemacht :hihi:
Mir schweben ein paar Ausführungen davon vor, die Kerndaten sind aber gleich:
    Betrieb mit 12V
    Einstellung per Smartphone (heutzutage wohl unverzichtbar...)
    PWM-Frequenz >1kHz (ich ziele auf 10kHz)

Bei der PWM-Ansteuerung für die RGB-LEDs habe ich zwei Ansprüche gehabt: einerseits sollte das Auge kein Flimmern mitbekommen.
Dies ist etwas hässlich bei Implementierungen, die wie bei Arduino den "analogWrite"-Befehl nutzen. Da liest man was und hat das Flimmern in den Augenwinkeln.
Unschön. Noch schlimmer: TI schreibt in einer AppNote, dass 50Hz ausreichen :aufsmaul:
Meine zweite, "sportliche" Anforderung ist mal wieder: mit so wenig Ressourcen auskommen wie möglich. D.h., ein µC mit einem Timer soll das alles richten.
Unmöglich? Nicht ganz ;)
Nun habe ich etwas überlegt und den PWM-Part schon funktionsfähig hinbekommen. Den Code dafür gibt's hier zur freien Verwendung: (MSP430 mit TI-Compiler)
Code:
#include "msp430.h"

int main( void )
{
  // Watchdog als PWM-Timer nutzen
  WDTCTL = WDTPW | WDTTMSEL | 0x01 | WDTCNTCL;  //WD als interval timer, Prescaler auf 8192 (0.512ms)
  IE1 |= WDTIE; 
 
  BCSCTL1 = CALBC1_16MHZ;
  DCOCTL = CALDCO_16MHZ;
 
  P1DIR |= BIT0 | BIT5 | BIT6; //R | B | G
  P1OUT &= ~(BIT0 | BIT5 | BIT6);
 
  TA0CTL |= TASSEL_2 | ID_1 | MC_2 | TAIE; //TimerA im cont. mode, Prescaler auf 1
 
  TA0CCR0 = 4000; //rot - hier später Init-Werte aus EEPROM laden   
  TA0CCR1 = 2000; //grün
  TA0CCR2 = 500;  //blau
  TA0CCTL0 |= CCIE;
  TA0CCTL1 |= CCIE;
  TA0CCTL2 |= CCIE;
 
  __enable_interrupt();
  _BIS_SR(CPUOFF + GIE); //CPU schlafen legen, Interrupts aktiv
  //while(1);

  return 0;
}

//ISR für rot
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_red (void)
{
 P1OUT &= ~BIT0;
}

//ISR für grün und blau
#pragma vector=TIMER0_A1_VECTOR
__interrupt void timer_gruen_blau(void) {
  switch (TA0IV) {
    case TA0IV_TACCR1 :
      P1OUT &= ~BIT6;  //grün ausschalten
      break;
    case TA0IV_TACCR2 :
      P1OUT &= ~BIT5;  //blau ausschalten
      break;
  }
}

#pragma vector=WDT_VECTOR
__interrupt void timer_watchdog(void)
{
  TAR = 0; //TimerA Zähler reset
  P1OUT |= BIT0 | BIT5 | BIT6;
}
Für die Anwendung habe ich den MSP430G2202 ausgesucht, der nur einen 16bit-Timer hat - dafür aber drei Capture-Compare-Register.
D.h., ideal für die drei PWM-Kanäle! Kleiner "Haken": Das CCR0-Register hat einen eigenen Interrupt, CCR1 und CCR2 aber sind in einem Interruptvektor zusammengefasst,
deshalb der switch für grün und blau.
Was daneben noch auffällt, ich benutze den Watchdog als Timer für die 2kHz-PWM. Mit ein paar if's und etwas Rechnen könnte man die Periode zwar mit dem TimerA
auch noch erschlagen, dieser Weg scheint mir aber sauberer, da der Wert immer gleich bleibt.
Allerdings habe ich hier das Problem, dass kein Timer wirklich frei ist für die Kommunikation mit der Außenwelt :gruebel:
Denn ich habe vor, den bei vielen Smartphones vorhandenen IR-Sender als Fernsteuerung zu verwenden und dann alles wirklich "universell" zu bedienen:
Dateianhang:
MiRemote.png
Das möchte ich nicht mehr missen...
Für die serielle Kommunikation muss ich mir aber nochwas elegantes überlegen, denn der MSP430 hat auch kein USI, das dafür brauchbar wäre.

OK, soweit mal mein Stand und meine Ideen. Falls ihr für den ein oder anderen Punkt kritische Anmerkungen oder Verbesserungsvorschläge habt, bitte her damit ;)

MfG,
playOvation


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RGB-Lampe mit Fernsteuerung
BeitragVerfasst: Sa 20. Mai 2017, 23:11 
Offline

Registriert: Di 8. Jun 2010, 18:55
Beiträge: 762

Spezialgebiet: Normen
Schule/Uni/Arbeit: F&E Elektronik
So, die erste Platine ist inzwischen fertig:
Dateianhang:
IMG_20170521_000417.jpg
Ein Hallo-Welt läuft auch schon ;) Jetzt mache ich noch ein paar Änderungen aufgrund der IR-Routine,
dann sollte meine Lampe doch bald leuchten :mrgreen:

MfG


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RGB-Lampe mit Fernsteuerung
BeitragVerfasst: So 21. Mai 2017, 07:06 
Offline
Benutzeravatar

Registriert: Mo 13. Aug 2012, 09:03
Beiträge: 1809
Wohnort: Mannheim

Spezialgebiet: Ja
Schule/Uni/Arbeit: C:/Windows/System32
Und wenn man ein Lowpass filter hinter die FET's hängt?
Sollte doch eigentlich das flimmern bei den 490hz PWM rausfiltern.

Die PWM frequenz vom Arduino kann man aber auch ändern. https://arduino-info.wikispaces.com/Ard ... -Frequency

Ich hätte stattdessen ein ESP8266 (2€) genommen, dieser hat schon WLAN für die Smartphone steuerung onboard und kann ebenfalls PWM. 1khz standardmäßig, änderbar.
Oder ein ESP32(5€) welcher aber total overkill wäre, dafür aber neber WLAN noch Bluetooth hat.
Siehe 4.18 LED PWM
https://espressif.com/sites/default/fil ... eet_en.pdf

Beide sind mit der Arduino IDE, Python, Lua oder anderen Sprachen programmierbar.

_________________
Bild


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: RGB-Lampe mit Fernsteuerung
BeitragVerfasst: So 21. Mai 2017, 11:27 
Offline

Registriert: Di 8. Jun 2010, 18:55
Beiträge: 762

Spezialgebiet: Normen
Schule/Uni/Arbeit: F&E Elektronik
Hi,

vielen Dank für den Hinweis für die ESP8266-Boards. Das ESP-12 ist ja schon sehr cool! Habe ich bisher gar nicht gekannt...
Die schreibe ich mal gleich auf die Einkaufsliste, bin ja bald wieder an der Quelle. Für einen guten Euro macht man da gar nichts falsch :D
Nummer 1 braucht aber trotzdem Infrarot, sonst funktioniert der "eine App für alle Geräte"-Gedanke nicht :oops:
Aber für die nächsten Projekte auf jeden Fall vorgemerkt!

Zu deinen Vorschlägen:
Tiefpass funktioniert im Prinzip, praktisch aber nicht so gut. Da ich das gleiche Modul später auch für weiße LEDs benutzen möchte,
ist es der Farbwiedergabe abträglich, eine Art Stromregelung zu verwenden - man kennt es ja: bei geringen Strömen wird die Lichtfarbe
recht gelb oder grün. Deshalb immer mit Nennstrom drauf, dafür aber das Auge austricksen :D
Interessant, dass beim Arduino die PWM-Frequenz geändert werden kann. Ist halt eben doch nur ein AVR. Dann nehme ich meine
falschen Beschuldigungen natürlich zurück ;)

Einen angenehmen Grillwetter-Sonntag!

MfG


Share on FacebookShare on Google+Share on Reddit
Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Gehe zu:  



Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de

moShBox © 2008, 2009, 2010 mosfetkiller-Community