
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> Hallo zusammen... > Habe immer noch das Problem, daß ich einen 3. PWM Ausgang benötige. > Einen Digitalausgang mit dem Interrupt zu pulsen halte ich für zu heikel, da mir das doch sicher den weiteren Programmablauf stört...? ( http://ccintern.dharlos.de/forum/lesen.php?eintrag=4390 ) > Daraufhin habe ich mir die i2c-Erweiterung mit Max520 Chip besorgt. Nun habe ich zwar weitere Analogausgänge, aber in Gleichstrom, nicht PWM moduliert, was aber für die weitere Verstärkung mit TOPFETs unumgänglich ist. > Im Conrad Katalog steht, die Micro hätte 2 PWM Ausgänge, was aber in den Beschreibungen dazu arg eingeschränkt wird. Wie sieht das bei der Open-Micro aus ? So würde ich eine Micro als slave hinter meine M-Unit hängen, und diese übernimmt dann die PWM Ausgabe... > Oder ein vernünftiger DC - PWM Wandler würde es auch tun. Leider nix gefunden, was einen Gleichstrom von 0 bis 5V > in PWM umwandeln könnte. > Weiß jemand was ? > ReinhardB > ' ANWENDUNG: Weitere PLM-Ausgänge ' '-------------------------------------------------------------------- ' Das Beispiel zeigt, wie man mit einem Trick weitere PLM-Ausgänge ' Erzeugen kann. ' Es wird der reguläre DA-Ausgang benutzt um einen IRQ zu erzeugen ' (DA-Ausgang mit IRQ verbinden) ' Der Interrupt findet alle 500us statt und wird in der Interrupt ' Routine zu einer Pulsbreitenmodulation verarbeitet. ' ' In diesem Beispiel werden die Ports 1 und 16 (LCD Beleuchtung) ' angesteuert. Der Wert für den PLM-Ausgang wird in der Variablen ' PLM3 bzw. PLM 4 festgelegt. Die PLM-Frequenz ist etwa 25ms, was ' für die Dimmung von Lampen ausreichen sollte. ' ' Das Beispiel fährt im Hauptprogramm den Wert der Variablen PLM3 ' durch den Bereich 0 bis 255. Sie sehen wie der zugehörige Ausgang ' Port 16 die Helligkeit der LCD-Beleuchtung am Application-Board ' langsam dimmt. ' Der gerade aktuelle Wert für PLM3 wird am LCD angezeigt. ' Das leichte Flackern am LCD kommt durch das Schreiben auf das LCD ' zustande. '--------------------------------------------------------------------- ' Achtung: ' Während einer Pause wird der IRQ nicht bearbeitet, Sie dürfen ' im Hauptprogramm also keinen PAUSE-Befehl verwenden. ' Nehmen Sie eine DELAY-Schleife um Pausen zu erzeugen. ' Der für den IRQ verwendete DA Ausgang ist normal verwendbar. '--------------------------------------------------------------------- '-------------------------- '------ I/O PORTS --------- '-------------------------- define PWMOUT3 as port[16] define PWMOUT4 as port[1] define PWMOUT2 da[2] define PWMOUT1 da[1] '-------------------------- '---- SYSTEM MEMORY ------- '-------------------------- define DELAY as word define COUNTER as byte define PLM3 as byte define PLM4 as byte define ICNT as byte '---------------------------------------------------------------------- INTERRUPT ISERVICE LCD.INIT '---------------------------------------------------------------------- #MAIN_PROGRAM for DELAY=0 to 10000 next '---------------------------------------------------------------------- COUNTER=COUNTER+10 PLM3=COUNTER LCD.POS 1,1 LCD.PRINT "COUNTER: " & COUNTER & " " goto MAIN_PROGRAM '---------------------------------------------------------------------- '--- PLM INTERRUPT SERVICE ---- '---------------------------------------------------------------------- ' IRQ CONNECTED TO DA1 OR DA2 - INTERRUPTRATE 500us #ISERVICE ICNT=ICNT+5 if ICNT<=PLM3 then PWMOUT3=on else PWMOUT3=off if ICNT<=PLM4 then PWMOUT4=on else PWMOUT4=off return interrupt |
| Antwort schreiben |