SceneSwitch-Lampen

Fragen zu Schaltungen, Elektronik, Elektrik usw.

Moderator: T.Hoffmann

dieterr
Hyper-User
Hyper-User
Beiträge: 1142
Registriert: Mo, 04.01.16, 18:16

Mo, 01.05.17, 17:45

Hallo zusammen,
ausgehend von diesem Thread bin ich auf die darin erwähnten SceneSwitch-Lampen gestoßen. Leider finde ich im Netz keine Information dazu, was Philips da verbaut hat. Extra dafür so ein Teil kaufen und schlachten will ich eigentlich nicht, da in der Lampe sowieso alles auf Netzpotential hängt und ich vermute den Aufwand für eine Adaptierung an meine Schaltung zu hoch. Dann doch gleich Neuentwicklung.

Aber:
- die Netzsuche nach schon Vorhandenem ohne konkretem Suchbegriff war sehr ineffektiv
- Das ganze wird über das Anlegen der Spannung, bzw. Aus-zeiten gesteuert. Woher weiß eine Schaltung wie lange sie "Off" war?
- Insgesamt wird es damit wohl auf eine Umsetzung mit Controller (PIC, etc) hinauslaufen, damit habe ich aber keine Erfahrung. Aber wenn jemand eine alternative Idee hat, gern.

Ein Zustandsdiagramm habe ich mir schon mal skizziert, aus praktischen Überlegungen habe ich mich mal grob an schon vorhandene Infos gehalten. E ist Eingang, A1 und A2 logischerweise die Ausgänge. "A1" brauche ich eigentlich / bisher nicht, aber zur Sicherheit habe den gleich mit eingeplant. Neben "0" und "1" sollen die Ausgänge PWM moduliert werden.

E "1": A1 "1", A2 "x"
E "0" >6s #Recall
E "1": A1 "1", A2 "x"

E "1": A1 "1", A2 "0"
E "0" >0,5s und <6s #Count
E "1": A1 "1", A2 "1/10"
E "0" >0,5s und <6s #Count
E "1": A1 "1", A2 "5/10"
E "0" >0,5s und <6s #Count
E "1": A1 "1", A2 "10/10"
E "0" >0,5s und <6s #Count
E "1": A1 "1", A2 "0"

E "0"
E "1" <1s #Reset
E "0"
E "1": A1 "1", A2 "0"

Ergänzung: zur Bestimmung der "Off"-Zeit ist mir eine Möglichkeit eingefallen. Man könnte die Entladespannung eines RC-Glieds mit 4-10µF und 1M in den analogen Eingang einlesen. Darauf gleich wieder "vollladen" und es ist wieder bereit.
Borax
Star-Admin
Star-Admin
Beiträge: 11980
Registriert: Mo, 10.09.07, 16:28

Mo, 01.05.17, 22:30

Woher weiß eine Schaltung wie lange sie "Off" war?
Indem der µC die Zeit misst (geht natürlich nur, wenn er während dieser Zeit auch Strom hat). Der muss also ein wenig gepuffert werden (mittelgroßer Kondensator). Jeder µC hat ja einen Takt. Zeiten im Millisekunden bis Sekunden Bereich zu messen / zu zählen gehört zu den absoluten Standardaufgaben. Danach kann er seinen aktuellen Zustand im EEPROM speichern. Beim nächsten Einschalten (nach langem Ausschalten) weiß er dann, was zu tun ist ;) Das kann jeder PIC oder AVR relativ einfach erledigen.
Gut wäre hierbei ein Netzteil mit möglichst kleinem Ausgangskondensator, damit der 'off' Zustand am Netzteil recht schnell erkannt werden kann. Andere Möglichkeit wäre direkt den 230V Zustand zu bestimmen (geht recht gut mit einem Optokoppler an einem 'Kondensatornetzteil'). Dann darf das Netzteil auch länger Strom liefern (soll es sogar - so kann der Pufferkondensator für den µC kleiner ausfallen). Ich persönlich bevorzuge AVR Chips (ehemals Atmel - inzwischen Microchip). Vor allem die ATTiny Serie. Die lassen sich auch in C oder Basic programmieren. Bei PICs geht eigentlich nur Assembler (BTW: Ich kann Assembler, bei zeitkritischen Sachen verwende ich das auch gerne, aber ich hab keine Lust alles in Assembler schreiben zu müssen).
dieterr
Hyper-User
Hyper-User
Beiträge: 1142
Registriert: Mo, 04.01.16, 18:16

Di, 02.05.17, 17:30

Borax hat geschrieben:
Woher weiß eine Schaltung wie lange sie "Off" war?
Indem der µC die Zeit misst (geht natürlich nur, wenn er während dieser Zeit auch Strom hat). Der muss also ein wenig gepuffert werden (mittelgroßer Kondensator). Jeder µC hat ja einen Takt. Zeiten im Millisekunden bis Sekunden Bereich zu messen / zu zählen gehört zu den absoluten Standardaufgaben. Danach kann er seinen aktuellen Zustand im EEPROM speichern. Beim nächsten Einschalten (nach langem Ausschalten) weiß er dann, was zu tun ist ;) Das kann jeder PIC oder AVR relativ einfach erledigen.
Nun, wie es funktioniert solange Spannung da ist, ist mir schon klar. Aber da ich nicht abschätzen kann, wie groß der Kondensator sein müsste, damit es für 6s Pufferung plus Speichern reicht, hatte ich nach einer davon unabhängigen Lösung gesucht. Egal, das lässt sich also lösen.

Auch ob PIC, AVR oder was auch immer ist für mich keine Glaubensfrage. PIC nur deshalb, weil ich (das Wort) von früher für einen kleinen Microcontroller kannte :D Hast du da einen Lieblingstyp? Eigentlich sollte ein 8poliger reichen, aber auch bei ATTiny gibt es laut Reichelt ja schon dutzende. Wie gesagt, da bin ich (bisher) völlig blank.

Erkennung der 230V-Leitung über Optokoppler ist gesetzt, das ist denke ich mal die einfachste Lösung. Ich will ungestört testen können ohne direkte Netzkopplung und es muss nicht kostenoptimiert für die Serie sein.
Borax
Star-Admin
Star-Admin
Beiträge: 11980
Registriert: Mo, 10.09.07, 16:28

Di, 02.05.17, 22:31

hatte ich nach einer davon unabhängigen Lösung gesucht. Egal, das lässt sich also lösen.
Yep. Der µC braucht nicht viel. Wenn Du mit 24V 'anfängst' und einen Kondensator auf diese Spannung auflädst, können ein paar Tausend µF bei 1-2 mA recht lange eine Spannung oberhalb von 5V liefern. Du brauchst halt einen Spannungsregler mit wenig 'Eigenverbrauch'. Ich verwende gerne den TS2951.
Erkennung der 230V-Leitung über Optokoppler ist gesetzt,
Ok. Dann kannst Du das ja schon mal testen. Hast Du ein Oszi?
Hast du da einen Lieblingstyp?
Ja. ATTiny45 (ist 8polig). 4K Code reicht (fast) immer. Wenn nicht, dann ATTiny85. Bei Deinen Anforderungen glaube ich aber nicht, dass der nötig ist (da würde auch der ATTiny25 reichen - kostet aber meist das gleiche wie ein Tiny45) Und die AVR-Basic Demo kann genau 4K :D
Was noch erforderlich ist: Programmer
Gibt es bei ebay sehr günstig. Beispiel: http://www.ebay.de/itm/USBASP-AVR-Progr ... Sw5UZZAGnC
Steckbrett wirst Du ja wohl haben :D
dieterr
Hyper-User
Hyper-User
Beiträge: 1142
Registriert: Mo, 04.01.16, 18:16

Mi, 03.05.17, 19:05

Borax hat geschrieben: Ja. ATTiny45 (ist 8polig). 4K Code reicht (fast) immer. Wenn nicht, dann ATTiny85. Bei Deinen Anforderungen glaube ich aber nicht, dass der nötig ist (da würde auch der ATTiny25 reichen - kostet aber meist das gleiche wie ein Tiny45) Und die AVR-Basic Demo kann genau 4K :D
Prima, dann schaue ich mir dazu mal Beispiele an und zeige dann mal, wie ich es mir vorstelle.
Borax hat geschrieben:. Hast Du ein Oszi?
Was noch erforderlich ist: Programmer
Gibt es bei ebay sehr günstig. Beispiel: http://www.ebay.de/itm/USBASP-AVR-Progr ... Sw5UZZAGnC
Steckbrett wirst Du ja wohl haben :D
Jein, ob das noch tut weiß ich nicht. Aber auch einen AVR Transistortester - der kann auch Frequenzen messen.
Easy thing :D Ideal wäre zwar einer der auch unter Linux läuft, aber zur Not...
Diverse :D
Borax hat geschrieben: Ich verwende gerne den TS2951.
Neumodisches Zeugs, kenne nur 7805 und 78L05 :lol:
Borax hat geschrieben:Yep. Der µC braucht nicht viel. Wenn Du mit 24V 'anfängst' und einen Kondensator auf diese Spannung auflädst, können ein paar Tausend µF bei 1-2 mA recht lange eine Spannung oberhalb von 5V liefern. Du brauchst halt einen Spannungsregler mit wenig 'Eigenverbrauch'.
Und dabei bin ich so stolz auf meine Lösung :)
dieterr
Hyper-User
Hyper-User
Beiträge: 1142
Registriert: Mo, 04.01.16, 18:16

Do, 04.05.17, 11:32

So, hier mal ein erster Entwurf.
LEDSwitch.png
Die Bauteile sind nicht exakt, da ich noch für alles was in der Bib gefunden habe, zB. steht auf der Ersatzliste:
7805 => TS2941
ATtiny12 => ATtiny45
4N29 => PC814
Die BUZ11 kann ich bei Bedarf auch noch gegen TTL-kompatible Typen tauschen, aber da ich die noch habe müssen sie für den ersten Tests reichen.
Stimmen die Ein/Ausgänge am ATtiny so? Habe ich was anderes wichtiges übersehen? Auch fehlt mir die Erfahrung, ob der ATtiny die Mosfets direkt mit PWM umladen kann. Da ich ja nur wenige Stufen habe, müsste das mit einer Auflösung von 1kHz ja reichen.
Benutzeravatar
Achim H
Star-Admin
Star-Admin
Beiträge: 13067
Registriert: Mi, 14.11.07, 02:14
Wohnort: Herdecke (NRW)
Kontaktdaten:

Do, 04.05.17, 21:52

Ich gehe davon aus, dass C1 ein Kondensatornetzgerät darstellen soll.
C1 sollte daher ein X2-Kondensator mit einer Spannungsfestigkeit von mindestens 275V sein. Die Netzspannung darf um +/-10% schwanken.
230V x 110% = 253V. Ein 250V Typ ist somit nicht ausreichend.

Die IR-Dioden im Optokoppler haben eine Vorwärtsspannung von (typ. - max.) 1,2 - 1,4V @ 20mA.
C1 benötigt für einen Laststrom von 20mA (Vf = ca. 1,2V) mindestens 277nF. Bei einer Toleranz von +/-20% ist ein 0,33µF/275V Kondensator erforderlich.
C1 benötigt für einen Laststrom von 10mA (Vf= ca. 1,1V) mindestens 138nF. Bei einer Toleranz von +/-20% ist ein 0,22µF/275V Kondensator erforderlich.
C1 benötigt für einen Laststrom von 5mA (Vf = ca. 1,05V) mindestens 69nF. Bei einer Toleranz von +/-20% ist ein 100nF/275V Kondensator erforderlich.
C1 benötigt für einen Laststrom von 1mA (Vf = ca. 1,05V) mindestens 14nF. Bei einer Toleranz von +/-20% ist ein 22nF/275V Kondensator erforderlich.

Zum Attiny darf Borax oder wer sonst noch möchte etwas schreiben. Davon habe ich Null Ahnung. :wink:
Borax
Star-Admin
Star-Admin
Beiträge: 11980
Registriert: Mo, 10.09.07, 16:28

Do, 04.05.17, 22:34

Auch fehlt mir die Erfahrung, ob der ATtiny die Mosfets direkt mit PWM umladen kann.
Kann er.
C1 benötigt für einen Laststrom von 1mA (Vf = ca. 1,05V) mindestens 14nF. Bei einer Toleranz von +/-20% ist ein 22nF/275V Kondensator erforderlich.
Passt. 1mA reicht. Schaltplan und Ein/Ausgänge am ATTiny schau ich mir morgen an.
[Edit]
Ein/Ausgänge am ATTiny sind ok. Würde ich auch so setzen.
Beim Schaltplan hätte ich noch ein paar Werte geändert... In der LTSpice Simulation schaut es so ganz brauchbar aus:
230V-Optokoppler2.png
Wegen Programmer usw:
Linux ist kein Problem. Die USBASP (sind eigentlich alles Fischl Clones: http://www.fischl.de/usbasp/ ) Programmer laufen problemlos unter Linux (über AVRDude). Bascom-AVR aber nicht. Das ist ein reines Windows-Programm. Unter Linux müsstest Du die Firmware mit C schreiben (avr-gcc läuft natürlich unter Linux). Da kann ich Dir aber nur begrenzt helfen. Ich kann zwar C halbwegs lesen (und zur Not auch schreiben), habe da aber einfach keine Übung. Wenn Du beim Programmieren in C aber sowieso keine Hilfe brauchst, nur zu! Einführung gibt es hier: https://www.mikrocontroller.net/articles/AVR-GCC
dieterr
Hyper-User
Hyper-User
Beiträge: 1142
Registriert: Mo, 04.01.16, 18:16

Fr, 05.05.17, 21:13

Danke für den Anstoß mit LTSpice, Wine sei Dank. Was mich dazu bewogen hat das GSpice-Gelumpe erst mal ad-acta zu legen. Gar nicht so kompliziert mit LTSpice wenn man den Dreh mal raus hat, zumindest für die einfachen Sachen. Mit den angegebenen Parametern konnte ich dann auch die Ergebnisse gut reproduzieren - habe es noch auf "0" bei "230V" umgestellt und dann gleich noch etwas weiter bzgl. Zeitverlauf optimiert, die 3 Dioden sind es wert.
Bildschirmfoto vom 2017-05-05_1.png
Bildschirmfoto vom 2017-05-05_1.png (14.44 KiB) 11397 mal betrachtet
Bildschirmfoto vom 2017-05-05_2.png
Bildschirmfoto vom 2017-05-05_2.png (7.18 KiB) 11397 mal betrachtet
Borax hat geschrieben: Wegen Programmer usw:
Linux ist kein Problem. Die USBASP (sind eigentlich alles Fischl Clones: http://www.fischl.de/usbasp/ ) Programmer laufen problemlos unter Linux (über AVRDude). Bascom-AVR aber nicht. Das ist ein reines Windows-Programm. Unter Linux müsstest Du die Firmware mit C schreiben (avr-gcc läuft natürlich unter Linux). Da kann ich Dir aber nur begrenzt helfen. Ich kann zwar C halbwegs lesen (und zur Not auch schreiben), habe da aber einfach keine Übung. Wenn Du beim Programmieren in C aber sowieso keine Hilfe brauchst, nur zu! Einführung gibt es hier: https://www.mikrocontroller.net/articles/AVR-GCC
OK, dann doch unter Win :( falls es mit Wine nicht klappt. Lieber mein very-basic-Basic als nicht vorhandenes "C"
Borax
Star-Admin
Star-Admin
Beiträge: 11980
Registriert: Mo, 10.09.07, 16:28

Sa, 06.05.17, 22:42

Gute Schaltungsoptimierung!
OK, dann doch unter Win :( falls es mit Wine nicht klappt. Lieber mein very-basic-Basic als nicht vorhandenes "C"
Probier es mal. Vielleicht läuft es ja auch unter Wine. Download hier: https://www.mcselec.com/index.php?optio ... &Itemid=54
Es reicht ja, wenn nur das Compilieren läuft. Zum Schreiben auf den Chip kannst Du ja dann AVRDude nativ unter Linux verwenden.
dieterr
Hyper-User
Hyper-User
Beiträge: 1142
Registriert: Mo, 04.01.16, 18:16

Fr, 26.05.17, 22:03

Hallo Borax,

So, der Fischl kompatible USBasp und ATTiny liegen mit dem Breadboard vor mir. Leider ist die 10 polige Buches des USBbasp ja nicht direkt über Steckleiste Breadboard kompatibel und ich musste erstmal einen Adapter basteln. Aber nun steht der Kontakt zum board.

Und jetzt müssen die Pins des Konnektors mit dem Attiny verbunden werden. Wenn ich der Logik folge müsste es so sein:

Konnektor Attiny
Pin 9 (MISO) => Pin 6
Pin 1 (MOSI) => Pin 5
Pin 7 (SCK) => Pin 7
Pin 2 (VCC) => Pin 8
Pin 8 (GND) => Pin 4
Pin 5 (RST) => Pin 1

Ist das soweit korrekt? Den Reset-Pin habe ich bei Fischl zwar nicht gefunden, aber bei anderen ist das auch so.

Und jetzt? Bascom läuft (derzeit unter Win7), der Zadig Treiber ist installiert. Kann ich an den Pin 5/6 des Attiny auch gleich Widerstand und LED anschließen während der Programmierung?
Und welche Einstellungen (der vielen Hunderttausend) muss ich in Bascom ändern bzw. vornehmen damit es funzt? Und dann suche ich noch ein "Hello World" Programm für die Konfiguration und den ersten Test.
Borax
Star-Admin
Star-Admin
Beiträge: 11980
Registriert: Mo, 10.09.07, 16:28

So, 28.05.17, 22:54

Pins stimmen.
Kann ich an den Pin 5/6 des Attiny auch gleich Widerstand und LED anschließen während der Programmierung?
Ja. Blinkt möglicherweise ein wenig während der Programmierung, aber das macht (normalerweise) nichts. Wobei ich das üblicherweise vermeide, also alle Prog-Pins bleiben während der Programmierung frei. Sonst muss man ggf. aufpassen wenn man da empfindliche Sachen angeschlossen hat.
Und welche Einstellungen (der vielen Hunderttausend) muss ich in Bascom ändern bzw. vornehmen damit es funzt?
Wenn der Treiber passt, in Bascom unter Options -> Programmer den USBASP auswählen, Clock auf Auto lassen und dann versuchen mal den Chip zu lesen:
Über Program -> Send to Chip -> Manual Program öffnet sich ein eigenes Fenster und dort mal Chip -> Identify ausprobieren. Wenn die Kommunikation funktioniert, sollten dann in der Zeile unter den Icons unter Chip nicht mehr die 3 Fragezeichen sondern ATTiny45 stehen...

HelloWorld:

Code: Alles auswählen

$regfile = "atTiny45.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

' Pins:
' RESET   1  v  8  +5V
'   PB3   2     7  PB2(SCK)
'   PB4   3     6  PB1(MISO)  -> Widerstand -> LED2 -> Masse
'   GND   4     5  PB0(MOSI)   -> Widerstand -> LED1 -> Masse

Config Portb.0 = Output                                     'LED1
Config Portb.1 = Output                                     'LED2

Do
   Set Portb.0
   Waitms 500
   Reset Portb.0
   Set Portb.1
   Waitms 500
   Reset Portb.1
Loop

End
dieterr
Hyper-User
Hyper-User
Beiträge: 1142
Registriert: Mo, 04.01.16, 18:16

Di, 30.05.17, 19:45

LEDs blinken, soweit alles mal OK. Unter Linux/Wine hat Bascom wohl Kommunikationsschwierigkeiten oder ich muss doch einen Treiber installieren, also doch erstmal weiter unter Win7.
Borax
Star-Admin
Star-Admin
Beiträge: 11980
Registriert: Mo, 10.09.07, 16:28

Mi, 31.05.17, 22:31

LEDs blinken, soweit alles mal OK.
Na dann: Welcome in the embedded world!
Unter Linux/Wine hat Bascom wohl Kommunikationsschwierigkeiten
Das hatte ich ja schon befürchtet. Aber wie schon in der PN gesagt: Du kannst unter Bascom auch nur compilieren und die .hex Datei mit AVRDude nativ unter Linux auf den Chip schreiben. Ist zwar umständlicher, aber das sollte problemlos funktionieren.
Ggf. beachten: http://lazyzero.de/elektronik/avr/usbasplinux
Borax
Star-Admin
Star-Admin
Beiträge: 11980
Registriert: Mo, 10.09.07, 16:28

So, 04.06.17, 12:49

Lust auf ein HelloWorld2?

Hier mal die Erweiterung mit PWM (die zwei LEDs faden gegengleich in 5 Sekunden rauf und wieder runter)

Code: Alles auswählen


$regfile = "atTiny45.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

' Pins:
' RESET   1  v  8  +5V
'   PB3   2     7  PB2(SCK)
'   PB4   3     6  PB1(MISO)
'   GND   4     5  PB0(MOSI)

Config Portb.0 = Output                                     'LED1
Config Portb.1 = Output                                     'LED2

Dim I As Byte

'Use pwm mode of timer0
Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up

Do
  For I = 0 To 254
    Pwm0a = I                                               'increase the PWM value
    Pwm0b = 255 - I                                         'decrease the PWM value
    Waitms 20                                               '255 * 20 Millisekunden -> rund 5 Sekunden
  Next
  For I = 255 To 0 Step -1
    Pwm0a = I                                               'decrease the PWM value
    Pwm0b = 255 - I                                         'increase the PWM value
    Waitms 20                                               '255 * 20 Millisekunden -> rund 5 Sekunden
  Next
Loop

End
Benutzeravatar
Achim H
Star-Admin
Star-Admin
Beiträge: 13067
Registriert: Mi, 14.11.07, 02:14
Wohnort: Herdecke (NRW)
Kontaktdaten:

So, 04.06.17, 12:59

Code: Alles auswählen

    Waitms 20                                               '255 * 20 Millisekunden -> rund 5 Sekunden

Sind Millisekunden der 60ste oder 100ste Teil einer Sekunde?
Bitte nicht hauen :?

Wenn 100, dann wären das rund 5 Sekunden (genau: 5,1 Sekunden).
Wenn 60, dann wären das 8,5 Sekunden.
ustoni
Auserwählter
Auserwählter
Beiträge: 2104
Registriert: Sa, 04.06.11, 12:39
Wohnort: Mechernich

So, 04.06.17, 13:07

Der war doppelt gut! :D :wink:

Milli ist ein genau definierter Vorsatz für Masseinheiten und entspricht 10 hoch -3, also ein Tausendstel.

Siehe auch
https://de.wikipedia.org/wiki/Vors%C3%A ... Feinheiten

20 Millisekunden multipliziert mit 255 Schleifendurchgängen ergibt 5,1 Sekunden.
Nicht berücksichtigt sind dabei die Ausführungszeiten der Befehle innerhalb der Schleife; kann man aber getrost vernachlässigen.
Benutzeravatar
Achim H
Star-Admin
Star-Admin
Beiträge: 13067
Registriert: Mi, 14.11.07, 02:14
Wohnort: Herdecke (NRW)
Kontaktdaten:

So, 04.06.17, 13:13

Mit der Zeit habe ich immer schon Probleme gehabt.
60 Minuten sind 1 Stunde,
60 Sekunden sind 1 Minute,
60 Millisekunden sind --> tja und stand ich da und wusste nichts mehr. Ist das jetzt noch Zeit oder dezimales System?
Sorry deswegen.
ustoni
Auserwählter
Auserwählter
Beiträge: 2104
Registriert: Sa, 04.06.11, 12:39
Wohnort: Mechernich

So, 04.06.17, 13:42

Ist das jetzt noch Zeit oder dezimales System?
Beides. Basiseinheit der Zeit ist die Sekunde (s). Zulässig wären folglich auch alle anderen Vorsätze. Es ist also auch zulässig, von einer Kilosekunde (ks) zu reden, zumindest laut SI-System. Ist halt nur nicht üblich.

1 ks = 16,667 Minuten = 0,277 Stunden

Umgekehrt: 1 h = 3,6 ks

:lol:

Vorsätze wie milli, kilo, Mega etc. haben immer die gleiche Bedeutung, völlig unabhängig von der SI-Maßeinheit.
Benutzeravatar
Achim H
Star-Admin
Star-Admin
Beiträge: 13067
Registriert: Mi, 14.11.07, 02:14
Wohnort: Herdecke (NRW)
Kontaktdaten:

So, 04.06.17, 15:01

Das bekloppte ist, bei Gramm (mg), Farad (mF) oder Vanillestangen (Milli Vanilli) hätte ich es sofort gewusst. Nur bei der Zeit scheint mein Gehirn auszusetzen. Vielleicht sollte ich einfach mal eine halbe Stunde länger nachdenken, bevor ich poste. 8)
ustoni
Auserwählter
Auserwählter
Beiträge: 2104
Registriert: Sa, 04.06.11, 12:39
Wohnort: Mechernich

So, 04.06.17, 15:32

Ja, man wird eben nicht jünger. Das Problem kenn ich.
Nicht mehr lange, dann hab ich ein Alter von 1,86 Gs erreicht. :lol:
dieterr
Hyper-User
Hyper-User
Beiträge: 1142
Registriert: Mo, 04.01.16, 18:16

So, 04.06.17, 18:41

Borax hat geschrieben:Lust auf ein HelloWorld2?
An dem Code kapiere ich einen Teil noch nicht. Wie diese beiden Teile zusammen das Faden ergeben.

Code: Alles auswählen

Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up

Code: Alles auswählen

    Pwm0a = I                                               'increase the PWM value
    Pwm0b = 255 - I                                         'decrease the PWM value
Falls meine Annahme stimmt: wieso ist "A", bzw. "B" gleichgesetzt mit "Pwm0a" bzw. "Pwm0b"? Das sind doch verschiedene Variablen?

Ich habe jetzt mal 3 Abende nur dafür gebraucht, die Zeit zu messen (und auszugeben) die ein Eingang auf "1" gesetzt ist. Mühsam das ganze, wenn man den Wert einer Variable im Attiny nicht anzeigen bzw. nur über Blinkcode ausgeben kann. Oder doch?
Borax
Star-Admin
Star-Admin
Beiträge: 11980
Registriert: Mo, 10.09.07, 16:28

So, 04.06.17, 19:01

Pwm0a und Pwm0b sind nicht wirklich variablen, sondern Register (quasi Hardware-Variablen).
Mit

Code: Alles auswählen

Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up
wird der Timer0 so konfiguriert, dass er 'durchläuft' (immer von 0 bis 255) mit einem achtel des CPU Taktes (Prescale = 8).
Immer wenn der Wert des Timers größer wird als der in Register Pwm0a gespeicherte Wert, dann wird der Ausgang des Timers PB0 (alias OC0A) auf 0 gesetzt (Pwm = Clear Up), beim Reset ders Timers (also wenn der wieder bei 0 anfängt) wird der Ausgang wieder auf 1 gesetzt. Dito für Pwm0b (der steuert Pin 6 = PB1 alias OC0B).
Mühsam das ganze, wenn man den Wert einer Variable im Attiny nicht anzeigen bzw. nur über Blinkcode ausgeben kann. Oder doch?
Per Blinkcode ist das schon mühsam. Du könntest aber natürlich mehrere LEDs (z.B. 4 Stück) als Ausgabe verwenden und damit binär immerhin 16 Ausgabewerte codieren. Andere Möglichkeit wäre ein RS232 -> USB Adapter. Dann kann der Attiny über einen Pseudo-seriellen Port und ein Terminalprogramm direkt Werte an deinen Computer schicken. Dort kannst Du sie dann lesen. Erfordert außer dem RS232 <-> USB Adapter noch einen PNP Transistor und ein paar Widerstände. Außer Du hast sowieso noch einen echten seriellen Port am Computer (früher war das Standard - aber schon seit ca. 20 Jahren nicht mehr). Dann wäre natürlich auch kein Adapter nötig. Solche Adapter kosten bei ebay nur wenige €. Z.B.: http://www.ebay.de/itm/USB-2-0-Auf-RS23 ... 1022629431
dieterr
Hyper-User
Hyper-User
Beiträge: 1142
Registriert: Mo, 04.01.16, 18:16

So, 04.06.17, 19:22

Borax hat geschrieben:Pwm0a und Pwm0b sind nicht wirklich variablen, sondern Register (quasi Hardware-Variablen).
Merci. Ich sehe schon, das wird mir noch viel Vergnügen bereiten 8) Entweder ich nutze schon bestehenden Code, und verstehe nur die Hälfte (und kapier nicht warum es nicht funktioniert), oder schreibe selber. Mit demselben Ergebnis.

Dann doch lieber Schaltungsdesign ...
Borax
Star-Admin
Star-Admin
Beiträge: 11980
Registriert: Mo, 10.09.07, 16:28

So, 04.06.17, 23:17

Entweder ich nutze schon bestehenden Code, und verstehe nur die Hälfte (und kapier nicht warum es nicht funktioniert), oder schreibe selber. Mit demselben Ergebnis.
Keine Sorge... Das wird schon!
Die Config Syntax in Bascom:

Code: Alles auswählen

Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up
...ist auch nicht gerade selbsterklärend. Aber mit direkter Register-Programmierung wäre es auch nicht viel verständlicher geworden.
Insgesamt ist das gar nicht so schwer zu verstehen. Am Anfang halt etwas ungewohnt. Hier ist eine allgemeine Einführung dazu: http://rn-wissen.de/wiki/index.php/Bascom_und_PWM
(Anmerkung: Es gibt in Bascom einige 'alias' Definitionen... die Compare-Register für Timer0 können als Compare0a oder Pwm0a oder OCR0A bezeichnet werden. Das steht so in der atTiny45.dat Datei:
OCR0A = $29
PWM0A= $29
COMPARE0A= $29
Egal wie man es nennt, es ist immer das Register an der Speicherposition 0x29 )
Antworten