was heisst den angefixt??? :)
ja klar kanst du meinen code benützen! ist ja schliesslich nichts spezielles...
viel spass damit und schönen gruss
Druckbare Version
was heisst den angefixt??? :)
ja klar kanst du meinen code benützen! ist ja schliesslich nichts spezielles...
viel spass damit und schönen gruss
@ 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.
Hallo,
hast du das mit den 3 PWMs hinbekommen?
Gruss reredur
@ 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 :-s :( . ( 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 :-)
/************************************************** ***
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
Hallo und fast ein Neujahrs-Gruß :-b
Es ist mittlerweile fast ein Jahr vergangen und endlich habe ich etwas Zeit ( trotz Bereitschafts-/ Notdienst) in dieser Sache weiter zu machen. O:)
Die Neue Arbeit hat halt ihren Tribut gefordert. :-b
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 =P~ . 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.
Ich hoffe für euch und für mich, dass das kommende Jahr sich nicht wie 6 Monate anfühlt. :^o =P~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
In diesem Sinne, euch allen einen Guten Rutsch ins Neue Jahr.
Sobald Zeit und Fortschritte da sind werde ich wieder berichten.
MfG Martin