- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: ATMega32 BascomAVR variable PWM via Timer2-0 für RGB LED

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    Anzeige

    Praxistest und DIY Projekte
    was heisst den angefixt???

    ja klar kanst du meinen code benützen! ist ja schliesslich nichts spezielles...
    viel spass damit und schönen gruss

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    02.12.2006
    Beiträge
    12
    @ Bluesmash, hui das ging schnell mit deiner Antwort. Vielen Dank für dein Entgegenkommen.
    Da ich ja sehr neu in diesem Forum bin, und auch generell aus meiner Sichtweise gesehen ist es dein geistiges Eigentum.
    Deshalb meine Anfrage.

    Danke @BM =D> ( irgendwie haut das mit den klatschenden Händen nicht hin )

    MfG Martin

    btw: Habe heute etwas Zeit ( jippie ) und kann sogar unmittelbar antworten.

  3. #13
    Hallo,
    hast du das mit den 3 PWMs hinbekommen?

    Gruss reredur

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    02.12.2006
    Beiträge
    12
    @ reredur.
    Sorry aber wie schon zwei Threads vorher geschrieben bin ich im Moment
    ziemlich eingespannt und habe seit dem auch noch keine Zeit mehr gefunden
    mich mit diesem Problem/ Thema zu beschäftigen.

    Das wird auch noch einige Zeit so bleiben.

    Sobald ich in der Sache Zeit finde und grundlegende Schritte, zum von mir
    gesetzten Ziel mache, werde ich es hier posten.

    Zum Zeitpunkt als ich dieses Thema eröffnet habe, war noch kein Gedanke
    oder bewusster Arbeitsplatzwechsel in Sicht oder angedacht.
    Hat sich alles überraschend ergeben und führt zu solchen Sachen, wie
    diesen Thread. So leid es mir tut . ( Auch im eigenen privaten Sinne,
    Familienleben und Kraftschöpfen für den Beruf sind im Moment wichtiger.

    MfG Martin
    btw: Über Thread Eingänge werde ich schon noch informiert

  5. #15
    /************************************************** ***
    This program was produced by the
    CodeWizardAVR V1.24.8d Professional
    Automatic Program Generator
    © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project : test2pwms
    Version :
    Date : 07.03.2007
    Author : F4CG
    Company : F4CG
    Comments:


    Chip type : ATmega32
    Program type : Application
    Clock frequency : 16.000000 MHz
    Memory model : Small
    External SRAM size : 0
    Data Stack size : 512
    ************************************************** ***/

    #include <mega32.h>

    // Standard Input/Output functions
    #include <delay.h>
    #include <stdio.h>

    #define ADC_VREF_TYPE 0x00


    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input|ADC_VREF_TYPE;
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;
    }

    // Declare your global variables here

    unsigned char ROT;
    unsigned char GRUEN;
    unsigned char BLAU;




    void main(void)
    {


    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTA=0x00;
    DDRA=0x00;

    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTB=0x00;
    DDRB=0x00;

    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D initialization
    // Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0xFF;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 2000.000 kHz
    // Mode: Ph. correct PWM top=00FFh
    // OC1A output: Non-Inv.
    // OC1B output: Non-Inv.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0xA1;
    TCCR1B=0x02;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x62;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;

    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud rate: 9600
    UCSRA=0x00;
    UCSRB=0x18;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x67;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // ADC initialization
    // ADC Clock frequency: 1000.000 kHz
    // ADC Voltage Reference: AREF pin
    ADMUX=ADC_VREF_TYPE;
    ADCSRA=0x84;



    while (1)
    {
    // Place your code here

    GRUEN=read_adc(0);
    BLAU=read_adc(1);
    ROT=read_adc(2);

    OCR1AL=BLAU;
    OCR1BL=ROT;
    OCR2=GRUEN;

    printf("\rROT: %-u ",ROT);
    printf(" GRUEN: %-u ",GRUEN);
    printf(" BLAU: %-u ",BLAU);

    };
    }


    viel spass!gruss reredur

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    02.12.2006
    Beiträge
    12
    Hallo und fast ein Neujahrs-Gruß

    Es ist mittlerweile fast ein Jahr vergangen und endlich habe ich etwas Zeit ( trotz Bereitschafts-/ Notdienst) in dieser Sache weiter zu machen.

    Die Neue Arbeit hat halt ihren Tribut gefordert.

    Der Reihe nach.

    1. Die LPT-/ Druckerschnittstelle-Schaltung läuft schon etwas länger ( ca. seit Mitte des Jahres ) und nach einigen zeitlich begrenzten Versuchen den Fehler zu finden, habe ich die Schaltung noch einmal komplett neu aufgebaut und siehe da, es funzt . Habe aber seit dem nicht recht die Zeit gefunden weiter zu machen in dieser Sache.

    2. Habe ja vorgehabt das ganze autark mit einem Solarpanel und Akku plus Ladesschaltung/Akkusaver zu betreiben.
    Durch eine LED Schaltung aus dem Jahr 2005 hatte ich noch 5mm RGB Led´s von Kingbright mit 2x Gem. Kathode ( siehe Bascom Programm Listing ) und die angedachte Reihenschaltung war hiermit nicht möglich, ohne zu große Leistungsverluste in kauf zu nehmen.
    Zumal nun in dieser vergangenen Zeit Leistungsfähigere Power LED´s und fertige Controller ( Chromoflex ) am Markt verfügbar waren, habe ich umdisponiert.
    Aber die vorhandenen LED´s schreien trotzdem nach Weiterverarbeitung.

    EDIT 30.12.07 / 19:27 Uhr:
    3. Habe mir aber im laufe des Jahres doch die Bascom Vollversion per IN Download ( was ohne Probs abgelaufen ist ) geholt da mir die Begrenzung doch schon einige Probleme bereitet hat.

    Und beim weiteren testen der in den Threads angebotenen Programmen, fand ich es für meine Vorstellungen etwas schwierig die Farben und Intensität einzustellen.
    Bin hier bei auf das HSV Farbmodell gestoßen und wollte es einmal hiermit probieren.
    Das ganze ist als 3 Kanal Hardware PWM ( durch den Chromoflex Controller angefixt ) ausgeführt und kann mit einer RC5 Kompatiblen Infrarot Fernbedienung, einfachst in den einzelnen Werten verändert werden.
    Das ganze soll als Grundlage dienen für weitere Versuche.
    Evtl. sind auch 2-3 komplette RGB Kanäle ( als Software PWM drin ), aber das ist später dran.

    Hier einmal der Link zum Wikipedia Link in Bezug zur HSV Farbraum Beschreibung nach der ich vor gegangen bin.
    Link : http://de.wikipedia.org/wiki/HSV-Farbraum


    Und hier das Listing in Bascom für den ATMega32, vielleicht hilft es dem ein oder anderen in seinen Versuchen.


    Code:
    ' Demo einer 3 Kanal Hardware PWM ( 1 x Rot, 1 x Gruen , 1 x Blaue LED )  und Steuerung durch eine RC5 Kompatibele Infrarot Fernbedienung
    ' Das ganze ist mit einem Pollin Board " Atmel Evaluations-Board Version 2.0" und einem ATMega32 Prozessor realisiert.
    ' Als RGB LED wurde eine [5mm, 6 Pin, Fullcolor LED verwandt mit 2 x Blaue + 1 x Rot + 1 Gruene LED bei 2 x Gem. Kathode] von
    ' Kingbright Part No. LF5WAEMBGMBC (Klar Version) oder Part No. LF5WAEMBGMBW (Diffuse Version) genommen.
    ' Umrechnungsgrundlage von HSV zu RGB ist in Wikipedia zu finden Link: http://de.wikipedia.org/wiki/HSV-Farbraum
    ' und wurde in den Wertebereichen 360° = 255 Dezimal und 100% = 255 Dezimal angepasst, um mit Byte Variablen arbeiten zu können.
    ' geschrieben am 30.12.2007 durch Martin Derks.
    '---------------------------------------------------------------------------------------------------------------------------------------------
    
    
    $regfile = "m32def.dat"
    $crystal = 8000000
    $baud = 9600
    
    $framesize = 512                                            ' Reichlich hoch gesetzt um Reserven zu haben
    $swstack = 512                                              ' Reichlich hoch gesetzt um Reserven zu haben
    $hwstack = 512                                              ' Reichlich hoch gesetzt um Reserven zu haben
    
    
    $lib "mcsbyte.lbx"                                          'mcsbyte library um etwas kuerzeren Code zu generieren
    
    
    Config Rc5 = Pinc.6                                         ' Eingangs Pin für Infrarotempfaenger Baustein [(AtMega32 IC Pin 28) und (Pollin Board J4 Stecker Pin 24)]                                      '
    
    
    Config Portd = &B10110000                                   ' Port Bits d 4,5,7 auf High setzen
    
    
    
    ' Timer0 nicht setzen und nutzen da Bascom diesen intern für den Befehl GetRC5 nutzt
    
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
    ' 8 Bit PWM Ausgang
    ' Portd.4 = Rote LED [(AtMega32 IC Pin 18) und (Pollin Board J4 Stecker Pin 30)] und
    ' Portd.5 = Gruene LED [(AtMega32 IC Pin 19) und (Pollin Board J4 Stecker Pin 31)]
    Config Timer2 = Pwm , Pwm = On , Compare = Clear , Prescale = 1
    ' 8 Bit PWM Ausgang
    ' Portd.7 = Blaue LED [(AtMega32 IC Pin 21) und (Pollin Board J4 Stecker Pin 33)]
    
    Enable Timer1
    Enable Timer2
    Enable Interrupts
    
    
    Dim R As Byte , G As Byte , B As Byte , I As Byte , F As Byte , Rot As Byte , Gruen As Byte , Blau As Byte , Z As Byte
    Dim H As Byte , S As Byte , V As Byte
    ' H = Hue = Farbwert ; V = Value = Helligkeitsbeiwert ; S = Saturation = Sättigung
    
    Dim P As Integer , Q As Integer , T As Integer , P1 As Integer , Q1 As Integer , T1 As Integer
    Dim Address As Byte , Command As Byte
    
    
    
    Declare Sub Hsv_to_rgb(byval H As Byte , Byval S As Byte , Byval V As Byte)
    
     H = 0
     S = 255
     V = 255
    
       Call Hsv_to_rgb(h , S , V )                              ' Erster Subrutinen Aufruf, um einen eindeutigen Farbzustand einzustellen
    
     Do
    
        Getrc5(address , Command)
    
          If Address = 0 Then
           Command = Command And &B01111111
           Print "Adr.: " ; Address ; " Cmd: " ; Command        ' Wer mag kann den Wert von "Adress" & "Command" via RS232 ausgeben
          End If
    
    
    
        Select Case Command
         Case 32 :                                              ' erhöhe Hue ; entspricht der Taste [CH+] der IR FB
         H = H + 1
    
         Case 33 :                                              ' verringere Hue ; entspricht der Taste [CH-] der IR FB
         H = H - 1
    
         Case 16 :                                              ' erhöhe Value ; entspricht der Taste [VOL+] der IR FB
         V = V + 1
    
         Case 17 :                                              ' verringere Value ; entspricht der taste [VOL-] der IR FB
         V = V - 1
    
         Case 13 :                                              ' erhöhe Saturation ; entspricht der Taste [Symbol Lautsprecher aus / Mute] der IR FB
         S = S + 1
    
         Case 60 :                                              ' verringere Saturation ; entspricht der Taste [Symbol 3 Striche im Bildschirm = TEXT] der IR FB
         S = S - 1
    
         Case 63 :                                              ' setze H,S,V auf 0 entspricht der Tast [Symbol leerer Bildschirm] der IR FB
         H = 1
         S = 1
         V = 1
    
         Case 46 :                                              ' setze H,S,V auf 255 entspricht der Taste [Symbol 3 unterschiedlich lange Striche im Bildschirm = Sskundäres Menue] der IR FB
         H = 255
         S = 255
         V = 255
    
         Case 41 :                                              ' setze H,S,V auf 128 entspricht der Taste [ Symbol Pfeil oben und unten mit 2 Strichen im Bildschirm = Speichern/Ausführen/Bestätigen] der IR FB
         H = 128
         S = 128
         V = 128
    
        End Select
    
    
    
       Call Hsv_to_rgb(h , S , V )
    
        Print " Rot=" ; Rot ; " " ; " Gruen =" ; Gruen ; " " ; " Blau=" ; Blau ; " " ; "   H= " ; H ; " S=" ; S ; " V=" ; V       ' Wer mag kann sich die Daten via RS232 ausgeben
    
        Compare1a = Rot
        Compare1b = Gruen
        Ocr2 = Blau
    
     Loop
    
    End                                                         ' Ende des Hauptprogrammes
    
    
    
    
    
    
    
     Sub Hsv_to_rgb(byval H As Byte , Byval S As Byte , Byval V As Byte)
    
         If S = 0 Then
         R = V
         G = V
         B = V
    
         Else
         I = H / 43
         F = H Mod 43
         P = 255 - S : P1 = P * V : P = P1 / 256
         Q = S * F : Q1 = 10710 - Q : Q = Q1 / 42 : Q1 = Q * V : Q = Q1 / 256
         T1 = 42 - F : T = T1 * S : T1 = 10710 - T : T = T1 / 42 : T1 = T * V : T = T1 / 256
         End If
    
         Select Case I
    
           Case 0 :
           R = V
           G = T
           B = P
    
           Case 1 :
           R = Q
           G = V
           B = P
    
           Case 2 :
           R = P
           G = V
           B = T
    
           Case 3 :
           R = P
           G = Q
           B = V
    
           Case 4 :
           R = T
           G = P
           B = V
    
           Case 5 :
           R = V
           G = P
           B = Q
    
         End Select
    
         Rot = R
         Gruen = G
         Blau = B
    
    
        End Sub
    Ich hoffe für euch und für mich, dass das kommende Jahr sich nicht wie 6 Monate anfühlt.

    In diesem Sinne, euch allen einen Guten Rutsch ins Neue Jahr.
    Sobald Zeit und Fortschritte da sind werde ich wieder berichten.

    MfG Martin

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress