Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM verwenden als Rücklicht? Bremslicht?
Fighter-2
20.02.2008, 18:28
hey!
Ich bin dabei ein kleine Spielerei an meinem Zweirad zumachen! ;)
Ist nicht für die Straße! ;)
Undzwar habe ich mir ein LED Rücklichteinsatz gebastelt!
Einfach 5 Led in Reihe geschaltet und davon 5 Reihen untereinander, auf einer Platine!
Nun hatte ich die Idee, eine PWM zu programieren!
Weil das Fahrlicht und das Bremslicht sollen ja unterschiedlich doll leuchten! ;)
Also bei dem Fahrlicht soll das PWM aktiv sein und die LED quasi drosseln und beim bremsen, durch eine Abfrage ausgehen!
Also brauch ich nur 5 PWM's und einen Port für die Abfrage!
Da ein Strom von 30ma beim bremsen fließen soll, damits schön hell ist, brauch ich doch Transistoren dafür oder??
habt ihr einen Tipp, welchen Atmega ich ambesten dafür nehmen soll? nen Atmega32 wäre wahrscheinlich unterfordert und platzmäßig zugroß!
Also möchte das schon recht klein halten! ;)
LG Chris
BASTIUniversal
20.02.2008, 19:16
Hi!
Wenn du sowie so alle 5 LED Reihen auf einmal ansprichst, dann brauchst du nur eine PWM. Bei einigen neueren Autos wird das meines Wissens nach auch so ähnlich gelöst...Rück- und Bremslicht in einem.
Transistoren brauchst du vermutlich in jedem Fall, denn 5 mal die Durchlassspannung einer Roten LED (ich nehme mal 2,0V an) macht schon 10V! Dein AVR (egal welchen du nimmst) kann maximal 5,5V bereitstellen.
Als Controller reicht in dem Fall, dass du nur eine PWM verwendest, ein ganz kleiner ATTiny13 oder ein ähnliches Kaliber.
MfG
Basti
Fighter-2
20.02.2008, 21:56
Ich habe mir den mal angeschaut den Controller!
Der is ja echt mini ^^
aber wie programmiere ich den? Kann man den auch wie nen Atmega32 progen?
Hallo,
ja, kann mit den gleichen Sprachen und dem gleichen ISP beschrieben werden. Falls du mit dem Controller noch etwas weiter spielen möchtest, empfehle ich den Tiny2313. Der ist zwar etwas größer besitzt aber ein USART. Soll es wirklich nur das beschriebene Projekt sein ist der 13 völlig ausreichend.
Gruß
Jens
Fighter-2
20.02.2008, 23:13
Und wie programmiert man das?
Fighter-2
21.02.2008, 00:25
Achja... kann man auch diesen Treiberbaustein dafür verwenden?
Den ich habe davon noch drei hier :)
http://www.reichelt.de/?;ACTION=3;LA=4;GROUP=A21E;GROUPID=2921;ARTICLE=22 085;START=0;SORT=order_col_artnr_besch;OFFSET=1000 ;SID=32aHBhTKwQASAAAEpTEqY6a8738a8f8748e00b6d4d725 4a117208
Danke schonmal für eure Hilfe!
Wie hoch muss man den takten, damit man eine LEd von hell nach ganz dunkel dimmen möchte?
Wie viele PWm's kann ich den mit einem Atmega32 ansteuern? konnte dem Datenblatt leider nicht richtig entnehmen!
BASTIUniversal
21.02.2008, 17:24
Hi!
Den ULN2803 kannst du für diesen Zweck verwenden. Das ist ein Darlington-Transistor Array (sprich sind 8 Stück drin), dass nach GND durchschaltet. Du musst also so vorgehen:
Vcc---Vorwiderstand---LED-LED-LED-LED-LED---ULN2803---GND
Ein Mega16 hat vier PWM Channels, da wird ein Mega32 vermutlich genauso viele haben. Das steht aber meistens auf der allerersten Seite des Datenblattes.
MfG
Basti
Fighter-2
21.02.2008, 18:14
Hey!
Das stimmt leider nicht so, wie du es mir erklärt hast! ;)
Ich denke das geht so:
Vcc --> ULN2803
Port --> ULN2803 --> Wiederstand --> Leds -- GND
Am ULN2803 wird extra die VCC angeschlossen! Der ULN2803 schaltet das einfach nur durch, durch das Singnal vom Atmega!
So habe ich mal Relais angesteuert! ;)
Aber mich interssiert das ob man auch ohne einen PWM Ausgang, das mit einem Timer machen kann! ;)
LG Chris
BASTIUniversal
22.02.2008, 19:46
Öhm, mein Datenblatt sagt "[...] eight NPN Darlington pairs."
Naja, und mit NPN-Transistoren schaltet man nun mal nach GND durch. Vcc wird nur dann Verbunden, wenn man die internen Freilauf Dioden nutzen will (also bei Induktiver Last).
Im Anhang extra ein Beweisfoto aus meinem Datenblatt :-)
Zu deiner PWM: Die Frequenz deiner PWM muss nicht sonderlich groß sein, 100-200 Herz sollten genügen (TV läuft meist nur mit 50Hz). Außerdem brauchst du im Endeffekt nur drei verschiedene PWM "Zustände":
1. Aus (wenn überhaupt)
2. Dunkler Betrieb als Rücklicht
3. Heller Betrieb als Bremslicht
Mit anderen Worten: Ja, du kannst das auch ohne speziellen PWM-Ausgang machen.
MfG
Basti
Fighter-2
23.02.2008, 14:48
Hey.. kann mir dann einer sagen, wie man standartmäßig nen Befehl im Bascom dafür schreibt?
LG Chris
python_rocks
23.02.2008, 15:31
Hey.. kann mir dann einer sagen, wie man standartmäßig nen Befehl im Bascom dafür schreibt?
Hallo Chris!
In etwa so:
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 5
$framesize = 20
'PWM-Ausgang
Pwm_out Alias Portb.0
Config Portb.0 = Output
'Bremslicht Eingang (Pulldown-Widerstand nicht vergessen)
Break_light_in Alias Pinb.1
Config Pinb.1 = Input
'Normales Licht Eingang (Pulldown-Widerstand nicht vergessen)
Normal_light_in Alias Pinb.2
Config Pinb.2 = Input
'Timer0 als PWM: 9600000 / 64 / 256 / 2 = 292,9 Hz
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 64
Pwm0a = 0
Do
If Break_light_in = 1 Then
Pwm0a = 255
Else
If Normal_light_in = 1 Then
Pwm0a = 130
Else
Pwm0a = 0
End If
End If
Loop
End
Ungetestet. Vielleicht habe ich mich irgendwo vertan.
mfg
Gerold
:-)
EDIT: Prescaler falsch gesetzt
Fighter-2
23.02.2008, 15:43
Cool danke! :)
Aber man könnte das Bremslicht doch auch weg lassen oder?
DEn wenn ich doch nen passenden Vorwiederstand einsetze, das da halt 30mA
fließen als Bremslicht und dann nur drosseln, wenn ich net bremse?
Versteht ihr was ich meine?
Bei normalen Licht drosseln und dan beim Bremslich nicht mehr!?
python_rocks
23.02.2008, 15:45
Hallo Chris!
http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.23
Außerdem würde ich noch den Watchdog aktivieren. So dass sich der µC neu startet, falls er abstürzt.
mfg
Gerold
:-)
python_rocks
23.02.2008, 15:54
Aber man könnte das Bremslicht doch auch weg lassen oder?
DEn wenn ich doch nen passenden Vorwiederstand einsetze, das da halt 30mA
Hallo Chris!
Natürlich musst du das Bremslicht nicht über den µC laufen lassen.
Du kannst das Bremslicht direkt schalten.
Wie man das alles korrekt "verdrahtet" kommt ganz darauf an, welche Spannungen (Gleichspannung oder Wechselspannung) zur Verfügung stehen. Du musst ja auch dran denken, dass du stabile 5 Volt für den ATtiny13 brauchst. Und das Ding muss gegen einiges abgesichert werden. Das entnimmst du am Besten aus dem Link, den ich dir einen Beitrag vorher schon gezeigt habe.
Es ist auch noch interessant, wieviel Spannung im Standgas und wieviel Spannung bei Vollgas an den Leitungen für das Rücklicht und für das Bremslicht anliegen.
mfg
Gerold
:-)
Fighter-2
23.02.2008, 15:59
Hey ^^
was soll der Link mir sagen? :D
ICh habe keine Lichtmaschine mehr drinne! :)
python_rocks
23.02.2008, 16:14
Hallo Chris!
Das hier wäre das Programm um die LEDs zu dimmen.
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 5
$framesize = 20
'PWM-Ausgang
Pwm_out Alias Portb.0
Config Portb.0 = Output
'Timer0 als PWM: 9600000 / 64 / 256 / 2 = 292,9 Hz
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 8
Pwm0a = 130
Do
nop
Loop
End
Sobald der ATtiny13 Strom bekommt, wird am Ausgang PB0 ein gepulstes Signal ausgegeben. Pwm0a bestimmt wie hell die LEDs leuchten. Der Wert kann von 0 bis 255 eingestellt werden.
So kannst du die LEDs einmal direkt mit der Leitung vom Bremslicht speißen. Und einmal über den µC und einem Transistor. Einzige Schwierigkeit: Der µC braucht 5 Volt um arbeiten zu können. Und auf keinen Fall mehr und Spannungsschwankungen sind auch nicht gerade toll.
Welche LEDs verwendest du? Hast du ein Datenblatt dafür? Wieviel Volt stehen zur Verfügung? Wie sieht deine derzeitige Schaltung aus?
Also, rück mal ein paar Informationen raus. ;-)
mfg
Gerold
:-)
Fighter-2
23.02.2008, 16:49
Hey ja ^^
Also ich hatte vor, einen ATmega dafür zu verwenden!
Nicht nur für das Bremslicht auch für andere Dinge! ;)
Sonst wäre das mitz dem Attiny13 garnicht so schlecht! Außer das ich gelesen habe, es schwer wäre den mit ISP zu progen!? Stimmt das? Sonst wäre echt eine Möglichkeit! ;)
WEnn ich den Atmega32 verwenden würde! Würde ich einen Treiberbaustein UN2803 verwenden! DEr SChaltet ja oben wie diskutiert einfach nur durch!
Man legt eine Externe Spannung auf einen Pin von den Treiber und der Schaltet die einfach durch, auf GND! ;)
An den wollte ich dann 5 LEd's in Reihe hängend! Da ich 12V Boardnetz habe, wollte ich einen Strom von 30mA über die LEDs fließen lassen! ;) DAnn 5 in Reihe!
Sind rote mit 1,6V bei 20mA!
Also muss am Wiederstand je 4V abfallen! Grob geschätzt! ;)
Hier mal eine 30sek Paintung! :D Damit du weißt wie ich mir das vorgestellt habe! ;)
Achja die Kondensatoren und einige andere Kleinigkeiten habe ich nun vernachlässigt! ;)
Hier:
http://img248.imageshack.us/img248/5843/gregdsfhw8.th.jpg (http://img248.imageshack.us/my.php?image=gregdsfhw8.jpg)
LG Chris
Fighter-2
23.02.2008, 16:53
Mist habe am ULN2803 dsa GND vergessen, kommt extra dran! ;)
python_rocks
23.02.2008, 17:19
Sind rote mit 1,6V bei 20mA!
Hast du einen Link zu einem Datenblatt?
EDIT:
Und hast du noch die Möglichkeit, die LEDs anders zu verdrahten?
Denn du betreibst ärgste Stromverschwendung. Und noch etwas. Wenn du die LEDs nicht mit der im Datenblatt angegebenen Idealspannung betreibst, dann ändert sich erstens die Farbe und zweitens werden die Dinger nicht lange leben.
mfg
Gerold
:-)
Fighter-2
23.02.2008, 17:51
ich ahbe kein DAtenblatt! Aber weiß das max. 30ma und da 1,6V abfallen! ;)
Du willst bestimmt ne Kennline vom Strom u nd Spannung haben oder??
Ne ich habe die Platine schon gelötet!
Ich bin nur durch einen Arbeitskolegen auf PWM aufmerksam gemacht worden!
Sonst hätte ich das ganze mit WIederständen gemachT! :D
Also das für eine Reihe 5er LEd zwei Wiederstände eingeplant waren!
DS über einen 10mA fließen fürs Fahrlicht und dann beim bremsen 20ma dazu kommen, was über einen anderen Wiederstand fließt! ;)
WEnn ich mit dem DAtenblatt irre, wofü brauchst du das?
SInd glaube ich die LEds von LED1.de
Hier die:
http://www.led1.de/shop/product_info.php?pName=led-5mm-rot-7000mcd-50-stueck-p-69&cName=led-5mm-ultrahell-rot-7000mcd-c-3_19
LG Chris
€dit:
Im Datenblatt steht 2,1V aber das ist falsch! ICh habe es mal ausgeteset! Die Durchbruchspannung ist bei 1,6V schon!
P.S Danke für deine (eure) Bemühungen! :=)
python_rocks
23.02.2008, 17:52
Hallo Chris!
Also ich hatte vor, einen ATmega dafür zu verwenden! Nicht nur für das Bremslicht auch für andere Dinge!
Dann müsstest du mit Steuerleitungen arbeiten. Wenn du das Rücklicht und das Bremslicht direkt mit den dafür zuständigen Leitungen (12 V) arbeiten lässt, dann genügt ein kleiner ATtiny13 um das Signal für das Rücklicht zu pulsen und fertig. Eigentlich könntest du auch leicht mit einem NE555 oder einem Schmitt-Trigger ein PWM-Signal erzeugen. Aber das feine ist, dass du den ATtiny13 nur mal kurz anders Programmieren musst und schon hast du ein anderes Verhalten. Außerdem kriegt man dieses Ding um unter zwei Euro.
Sonst wäre das mitz dem Attiny13 garnicht so schlecht! Außer das ich gelesen habe, es schwer wäre den mit ISP zu progen!?
Das habe ich noch nie gehört. Die Programme lassen sich genau so gut übertragen wie bei einem ATmega32. Nur die Programme müssen speicherschonender geschrieben werden. Aber das Programm für den PWM hast du ja schon gesehen. Das unterfordert sogar einen ATtiny13 ;-)
Würde ich einen Treiberbaustein UN2803 verwenden! DEr SChaltet ja oben wie diskutiert einfach nur durch!
Für deinen Anwendungszweck würde ich einen starken Transistor verwenden. Ein UN2803 ist nur dann interessant, wenn du es als Ersatz für >>8<< Transistoren verwenden würdest. Aber du brauchst nur einen Transistor. Z.B. ein BD675. Siehe: http://halvar.at/elektronik/bauteilkiste/transistoren/
Außerdem hast du in deinem Plan die LEDs falsch rum eingezeichnet. Der UN2803 ist entweder hochohmig (aus) oder er schaltet gegen GND. Die LEDs müssen also wie bereits von BASTIUniversal bemerkt. Und deinen Versuch mit einem Relais würde ich noch mal überdenken. Da hast du wahrscheinlich auch von VCC über den UN2803 nach GND geschaltet. Und ein Relais kannst du auch nicht falsch rum einbauen.
5 LEd's in Reihe hängend! Da ich 12V Boardnetz habe, wollte ich einen Strom von 30mA über die LEDs fließen lassen!
Genau ans Datenblatt halten. Die dort aufgezeigte Idealspannung verwenden. Nicht mehr und nicht weniger. Und dann so viele LEDs in Reihe, dass gerade noch ein kleiner Widerstand für die Idealspannung an den LEDs sorgt.
mfg
Gerold
:-)
Fighter-2
23.02.2008, 18:04
OKay wenn ich dann den Attxxxxx verwende, wie muss ich den anschließen, weil ich wüsste net wo man was anklemmt!
Ich tue mich damit noch was schwer! :( Gibbet nicht eine Zeichnung, wo der Controller verwendet wurde mit ISP?
Ja das Problem ist halt das ich meine LEd schon feste auf die Platine gelötet habe! ;)
JA mit dem ULN28003 schaue ich gleich nochma.. .das Board habe ich noch da ! ! :)
Und das mit der Transistor ist auch ne gute Sache! Stimmt, sonst würde ich den ULn2803 verschwenden! :)
Außer ich nehme den Atmega32! Wie müsste ich dan die Programmierung ausssehen lassen?
LG Chris
python_rocks
23.02.2008, 18:06
Im Datenblatt steht 2,1V aber das ist falsch! ICh habe es mal ausgeteset! Die Durchbruchspannung ist bei 1,6V schon!
Hallo Chris!
Ich gehe jetzt mal nur auf das ein. Die Durchbruchspannung ist uninteressant. Wichtig ist alleine der typische/ideale Strom. Und der liegt anscheinend bei 20 mA. Und die angegebenen 2,1 V beziehen sich darauf, dass genau bei dieser Spannung diese 20 mA durch die LED durch fließen. Also kümmert man sich darum, dass an jeder LED genau diese 2,1 Volt anliegen -- damit die idealen 20 mA durchfließen... du weiß schon.
12 / 2,1 Volt = 5,71
Also bist du mit 5 LEDs eh nicht mal so schlecht dran.
2,1 * 5 = 10,5 Volt für die LEDs
Dann bleiben noch 12 - 10,5 Volt = 1,5 Volt die vom Widerstand verbraten werden müssen.
R = U/I = 1,5 / 0,02 = 75 Ohm je 5er-Reihe.
Der ideale Strom von 20 mA fließt durch die LEDs, wenn du 5 LEDs in Reihe mit einem Widerstand von 75 Ohm schaltest.
Die Fünferreihen sind also OK. Das zum Thema LEDs.
Zu den anderen Sachen gibt es noch einen eigenen Beitrag von mir.
mfg
Gerold
:-)
PS: Ich bin bei den Rechnungen von idealen 12 Volt ausgegangen. Miss lieber mal nach ob du nicht doch eher 13,8 Volt anliegen hast. Denn dann müssen die Rechnungen korrigiert werden. 1,8 V mehr ist ein schöner Patzen, den man nicht außer acht lassen darf.
PS2:
Gibbet nicht eine Zeichnung, wo der Controller verwendet wurde mit ISP?
Ich zeichne was. Das kann aber ein bischen dauern.
.
Fighter-2
23.02.2008, 19:02
Genial ;) :)
Ja ich habe ne normale Batt im Roller, die auf geladen wird, wenn der Roller steht! Den ich habe keine Lichtmaschine mehr, damit kann der Motor dann besser arbeiten, geringer SChwungmasse = schnelleres Hochdrehen! ;)
DAnke!
LG Chris
python_rocks
23.02.2008, 19:59
ich habe ne normale Batt im Roller, die auf geladen wird
Hallo Chris!
Also doch 13,8 V und nicht 12 V.
Hier ein erster Vorschlag.
mfg
Gerold
:-)
PS: Ich glaube, ich werde die ISP-Anschlüsse wieder raus nehmen. Das verkompliziert die Sache nur. Wenn man den ATtiny13 programmieren will, dann kann man ihn ja raus nehmen.
PS2: Vielleicht ist es doch besser, wenn man mit einem PNP-Transistor schaltet. Dann würde das Bremslicht auch komplett ohne Transistor funktionieren.
.
Fighter-2
23.02.2008, 20:47
Hey!
Sieht ja verdammt gut aus! :=)
Aber ich finde das ziemlich kompliziert!
Zum PS:
Wie raus nehmen? Ich müsste mir ein extra Board zum progen basteln? :)
Ich mein die Schaltung würde aufjedenfall funktionieren, aber ich denke, wenn der Controler mal abstürzt habe ich nur noch Bremslich! ;)
Ich hatte die ganze Zeit einen Denkfehler! Die Transistoren können ja quasi nur als SChließer fungieren! Also geht das garnicht so wie ich mir das gedacht habe! :(
12V ---> Wiederstand ---> LEDs ---> Transistor ---> GND
Das der Controler ausfällt, das Transistor quasi abfällt (wenn es ein Öffner wäre) und schließt, also hätte ich dauer Bremslicht! Damit ich qut gesehen werde!
Das wäre im Störungsfall!
Wenn im Normal fall aber der Controler arbeitet, würde der quasi einfach PWMen :D , damit ich Fahrlich habe und bei einer Bremsung (abfrage über einen Port) das Pwmen unterbrechen und einfach nichts mehr machen.
Das hatte ich mir vorgestellt, aber net drüber nach gedacht, das Transistoren nur Schließer sind! Bin die ganze Zeit von einem relai aus gegangen! :D
Das war meiN Denkfehler!
Aber deine Schaltung ist sehr gut! Werde das dann auch so aufbauen! :)
Was meintest du mit dem anderem TyP Transisitor, der jetzige ist ja ein NPN, wie möchtest du da einen PNP einbauen?
LG Chris
python_rocks
23.02.2008, 22:15
Ich mein die Schaltung würde aufjedenfall funktionieren
Hallo Chris!
Nein, die Schaltung funktioniert so noch nicht. Der Schalter für das Rücklicht würde den Transistor ebenso wie der Schalter für das Bremslicht durchschalten lassen. Das PWM vom ATtiny13 würde ignoriert werden. Ich muss das noch ein wenig umstellen.
Alles über den ATtiny13 schalten wäre wirklich das Einfachste. Ich muss nochmal darüber nachdenken.
mfg
Gerold
:-)
Fighter-2
23.02.2008, 22:27
Mh.. deine Schaltung, wie auf den Bild geht echt nicht?
Komisch! Für mich was das eigentlich logisch!
Der Atty macht das fahrlicht also Taktet es und wenn ich Bremse steuert das Bremslicht den Tansistor einfach über!
Oder irre ich mich?
Ich hatte mir noch etwas überlegt! :)
Man könnte natürlich noch ein spezial Bremslicht haben! :D
WEnn ich bremse das es heller ist und einfach um sek takt an und aus geht ^^
Son Blinklicht mit voller stärke :)
Edit:
Was kann ich tun, um dir für deine Mühe schonmal zu danken? :) echt mega genial, das du dir so viel Mühe gibst! :) Danke :)
python_rocks
23.02.2008, 23:06
Hallo Chris!
Mh.. deine Schaltung, wie auf den Bild geht echt nicht?
Wenn du den Strom vom Rücklichtschalter nachverfolgst, dann wirst du sehen, dass dieser direkt zur Basis des Transistors geleitet wird und damit natürlich den Transistor durchschalten würde.
Man könnte natürlich noch ein spezial Bremslicht haben! :D
WEnn ich bremse das es heller ist und einfach um sek takt an und aus geht ^^ Son Blinklicht mit voller stärke :)
Das wäre das Einfachste der Welt. Aber man müsste alles über den µC machen. Ich hätte ja kein Bedenken dabei. Erst recht nicht, weil du mit dem Gerät ja nicht im öffentlichen Straßenverkehr rum bolzst ;-)
echt mega genial, das du dir so viel Mühe gibst! :) Danke :)
Weißt du, ich bin selber noch Anfänger und kann dabei viel lernen. Ich finde selber keine praktischen Anwendungen die es sich zu bauen lohnt. Immer wenn ich irgendetwas mit den AVRs machen will, dann gibt es das schon. Und meistens so billig, dass mir die Lust zum Selberbauen vergeht.
mfg
Gerold
:-)
Hier habe ich den nächsten Draft. Allerdings kriege ich immer einen Knoten im Kopf, wenn ich PNP-Transistoren in Schaltungen verwende, die mit zwei verschiedenen Spannungen arbeiten. Deshalb brauche ich noch eine Weile um darüber nachdenken zu können, ob das so evt. auch funktionieren kann.
Und wenn du es versuchen möchtest. Ein schnell blinkendes Bremslicht (wie bei den F1-Autos) ist kein Problem. Allerdings weiß ich jetzt nicht, ob dafür nicht doch eine ständige Stromversorgung des ATtiny13 günstig wäre. Damit der ATtiny13 beim Bremsen sofort reagieren kann und nicht erst warm laufen muss.
Damit der ATtiny13 beim Bremsen sofort reagieren kann und nicht erst warm laufen muss.
Der ist so schnell "warmgelaufen" da hast Du den Bremshebel "noch nicht mal berührt". Laut Datenblatt sind es im schlechtesten Fall 20 Taktzyklen + 64 ms.
Fighter-2
24.02.2008, 03:06
Kann man nicht einfach.. einen Transistor alles laufen lassen, wie du es schon gesagt hast? Machen wir das ganze nicht so kompliziert! ;) :)
Einfach einen Transistor in die gemeinsame Masse setzten und den PWMen lassen, dann haben wir doch das was wir haben wollten oder? :)
Beim Bremsen einfach einen Blinktackt! ;)
Ob ich nun den Bremshebel ziehe, kann man ja einfach mit einer Portabfrage mit einem Transistor machen!
Oder?
Oder was ganz anderes was wäre mit einem FET ?
LG Chris
python_rocks
24.02.2008, 03:18
Hallo Chris!
Ich habe den vorher gezeigten Plan jetzt auf dem Steckbrett nachgebaut. Als Widerstände (XXX) habe ich 10k (nach Gefühl) eingesetzt.
Der ATtiny13 lässt sich mit meinem mySmartUSB direkt in der Schaltung programmieren. Die LED blinkt zwar beim Programmieren mit, aber das macht nichts. Es funktioniert trotzdem.
@Windi: Danke für die Info.
Was das schnelle Hochfahren des µControllers betrifft: Zu den 64 ms kommt noch die Zeit dazu, die die Kondensatoren der stabilisierten Stromversorgung brauchen bis diese voll sind. Also ein bischen kommt schon noch dazu. Das stellt kein Problem dar, wenn das Rücklicht sowiso eingeschaltet ist. Dann hat der µC ja sowiso schon Strom und kann beim Bremssignal sofort los legen. Aber wenn das Rücklicht nicht eingeschaltet ist, dann verzögert sich das blinkende Bremssignal um mindestens 64 ms. Das ist schon ein 1/15 einer Sekunde. Mir wäre echt wohler, wenn der µC eine ständige Stromversorgung hätte.
@Chris: Wie ist das? Muss bei einem Rennen das Rücklicht immer eingeschaltet sein? Wenn JA, dann ist die Stromversorgung kein Problem. Dann könnte man die gesamte Schaltung vielleicht sogar in das Rücklicht einbauen. Wenn Nein, dann wäre die Frage, ob es ein Problem ist, zum µC (egal wo der dann liegen soll) eine ständige Stromversorgung zu legen.
mfg
Gerold
:-)
python_rocks
24.02.2008, 03:40
Hallo Chris!
Kann man nicht einfach.. einen Transistor alles laufen lassen
[...]
Einfach einen Transistor in die gemeinsame Masse setzten und den PWMen lassen
Das wäre ja der ursprüngliche Vorschlag gewesen. Dann fragtest du aber, ob man das Bremssignal nicht weg lassen könne. Das hat dann die Sache verkompliziert. :-)
Ich würde einfach dem µC vertrauen und alles vom µC erledigen lassen. Dann braucht man nur einen Transistor. Die derzeitige Lösung mit zwei Transistoren ist nur deshalb so, weil damit das Bremssignal auch dann noch funktioniert, wenn alle Transistoren und der µC hin wären.
Wie schaut's aus, bezüglich Stromversorgung? Läuft das Rücklicht sowiso immer? Oder ist es auch kein Problem, eine Stromversorgung zu legen?
mfg
Gerold
:-)
Fighter-2
24.02.2008, 11:55
Das Rücklicht ist eigentlich immer an! ;)
Natürlich nur, wenn ich den Zündschlüssel umgedreht habe! ;)
Ja machen wir das so das wir alles über einen laufen lassen! :)
Wo zeichnest du das immer? :)
python_rocks
24.02.2008, 12:58
Ja machen wir das so das wir alles über einen laufen lassen!
Wo zeichnest du das immer? :)
Hallo Chris!
Ich muss jetzt weg, werde mich aber später noch darum kümmern.
http://www.abacom-online.de/html/splan.html
mfg
Gerold
:-)
Fighter-2
24.02.2008, 14:30
Hey!
Ich habe mal mit der Demo was gebastelt ^^
http://img145.imageshack.us/img145/7132/schaltplanfo1.jpg
Fehlt zwar einiges aber naja grob...könnte das ja so aussehen oder?
Achja .. .weiß einer wo man die Vollversion her bekommt? :-# :-b
LG Chirs
python_rocks
24.02.2008, 16:19
Ich habe mal mit der Demo was gebastelt
Hallo Chris!
Das Symbol für einen Darlington-Transistor hat eine zusätzliche Linie für den Kollektor. Sieht aber schon gut aus.
Ich habe auch wieder ein wenig gezeichnet. Ich stelle es mal so zur Diskussion.
http://halvar.at/krimskrams2/ruecklicht_mit_leds_attiny13_v08.gif
Wenn mindestens einer von beiden Schaltern (Bremslicht oder Rücklicht) ein ist, dann wird das System mit Strom versorgt und läuft.
Liegt zusätzlich zur Stromversorgung auch noch ein Signal an PB4 an, dann blinken die LEDs schnell zwischen hell und halb hell.
Ich bin mir noch nicht ganz sicher, was den Spannungsteiler vor PB4 betrifft, da die LEDs ja vielleicht auch irgendwie in die Berechnung mit eingerechnet werden müssen. Da trifft jetzt mein Wissen auf Grenzen. Ich als Hobby-Elektroniker würde jetzt die Schaltung auf einem Steckbrett aufbauen, die Spannungen nachmessen und dann evt. korrigieren.
Das werde ich auch vielleicht machen. Mal sehen wie ich dafür Zeit finde.
mfg
Gerold
:-)
python_rocks
24.02.2008, 17:14
Hallo Chris!
Das zugehörige Programm könnte so aussehen:
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 5
$framesize = 20
Const Half_light = 40
Const Full_light = 255
'PWM-Ausgang
Pwm_out Alias Portb.0
Config Portb.0 = Output
'Bremslicht Eingang
Break_light_in Alias Pinb.4
Config Pinb.4 = Input
'Timer0 als PWM: 9600000 / 64 / 256 / 2 = 292,9 Hz
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 64
Pwm0a = Half_light
Do
If Break_light_in = 1 Then
Pwm0a = Full_light
Waitms 100
Pwm0a = Half_light
Waitms 100
Else
Pwm0a = Half_light
End If
Loop
End
mfg
Gerold
:-)
Fighter-2
24.02.2008, 17:20
Hey! :)
Ich würde das nicht mit einem Spannungsteiler machen, würde doch auch mit einem Transistor funktionieren, oder nicht? :)
Einfach den Internen Pullup ( Porta.0 = 1 ) einschalten und dann wenn ich Bremse, den Port auf masse ziehen lassen! :)
http://img267.imageshack.us/img267/3364/portabfragevg3.jpg
Und warum einen Darlintom Transistor? ICh habe gelesen, das die nicht für Hochfrequenztechnik geeignet sind und langsamer sind, als Einzelttransistoren!
Zitat:
"Nachteilig ist hingegen die gegenüber einem einzelnen Transistor größere Phasenverschiebung, so dass bei negativer Rückkopplung eher Instabilitäten auftreten können. Unter anderem aus diesem Grund sind Darlingtons meist nicht für Hochfrequenzanwendungen geeignet.
Darlington-Transistoren weisen gegenüber Einzeltransistoren langsamere Schaltzeiten auf, besonders beim Ausschalten des Kollektorstroms, weil der erste Transistor nicht in der Lage ist, die Ladungsträger aus der Basis des zweiten Transistors „auszuräumen“."
Danke ... wiedermals danke! :=)
python_rocks
24.02.2008, 17:44
Hallo Chris!
Ich würde das nicht mit einem Spannungsteiler machen, würde doch auch mit einem Transistor funktionieren, oder nicht?
Gute Idee! Das wäre eine echte Verbesserung. Nur den 1k-Widerstand kannst du ruhig auf 10k erhöhen.
Und warum einen Darlintom Transistor? ICh habe gelesen, das die nicht für Hochfrequenztechnik geeignet sind und langsamer sind, als Einzelttransistoren!
Weil ich in meinem Sortiment keinen normalen Transistor mit genügend Verstärkung habe. Und ich für so etwas immer diesen Darlington (BD675) verwende. :-) Reine Gewohnheit. ;-)
Wenn du dir meine Bauteilliste http://halvar.at/elektronik/bauteilkiste/transistoren/ durchsiehst, dann ist das der erste Transistor mit genügend Watt. Der Transistor muss mindestens 1,8 Watt aushalten. Außerdem ist in diesen Darlington-Transistor schon ein Pulldown mit eingebaut.
Weiters haben wir hier eine Anwendung die meilenweit von einer Hochfrequenzanwendung entfernt ist. Wir arbeiten her mit 200 bis 300 Hz. ;-)
mfg
Gerold
:-)
python_rocks
24.02.2008, 17:52
Hallo Chris!
Hier der Schaltplan mit Transistor statt Spannungsteiler:
http://halvar.at/krimskrams2/ruecklicht_mit_leds_attiny13_v09.gif
Und hier das abgeänderte Programm:
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 5
$framesize = 20
Const Half_light = 40
Const Full_light = 255
'PWM-Ausgang
Pwm_out Alias Portb.0
Config Portb.0 = Output
'Bremslicht Eingang
Break_light_in Alias Pinb.4
Config Pinb.4 = Input
Portb.4 = 1 'Pullup
'Timer0 als PWM: 9600000 / 64 / 256 / 2 = 292,9 Hz
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 64
Pwm0a = Half_light
Do
If Break_light_in = 0 Then
Pwm0a = Full_light
Waitms 100
Pwm0a = Half_light
Waitms 100
Else
Pwm0a = Half_light
End If
Loop
End
mfg
Gerold
:-)
Fighter-2
24.02.2008, 17:54
Achso ^^
Ja okay :)
Warum muss der Transistor den so viel aushalten? Sind doch nur 100mA die max fließen? Und ich habe immer noch nicht das verstanden, mit der Verstärkung bei Transistoren! -_-
python_rocks
24.02.2008, 18:12
Warum muss der Transistor den so viel aushalten? Sind doch nur 100mA die max fließen? Und ich habe immer noch nicht das verstanden, mit der Verstärkung bei Transistoren! -_-
Hallo Chris!
100 bis 130 mA -- je nach Spannung des Akkus.
0,130 A * 13,8 V = 1,794 Watt
Und jetzt zum Thema "Verstärkung des Transistors".
Wir wissen jetzt, dass von Kollektor nach Emitter 0,130 A fließen müssen. Hätten wir jetzt einen Transistor mit einer Verstärkung von 100 (hfe), dann müsste zwischen Basis und Emitter ein Hundertstel von 0,130 A fließen. Also 0,0013 A. Wenn der Transistor als Schalter arbeiten soll, dann übersteuert man diesen, damit auch wirklich voll durchgeschaltet wird. Man wählt meist den Widerstand so aus, dass zwischen Basis und Emitter drei mal so viel Strom fließt als sein müsste.
Zwischen Basis und Emitter sollte also 0,0013 A * 3 = 0,0039 A fließen.
Vom ATtiny13 bekommen wir ca. 5 Volt an die Basis des Transistors geliefert. An einem normalen Transistor fallen 0,7 Volt ab. Diese rechnet man weg.
R = U/I = (5 - 0,7) V / 0,0039 A = 1102,56 Ohm
Wenn man für die gleiche Rechnung einen Transistor mit einer Verstärkung von 750 nimmt, dann sieht die Rechnung so aus:
0,130 A / 750 hfe = 0.000173 A
0.000173 A * 3 = 0.00052 A
(5 - 0,7) V / 0.00052 A = 8269.23 Ohm
Und da ich sowiso den Strom schon mal 3 genommen habe, nehme ich 10.000 Ohm als Basiswiderstand für den Darlington, der eine Verstärkung von rund 750 hat. Durch die Verwendung eines Darlington braucht die Schaltung also weniger Strom.
http://www.elektronik-kurs.de/online/index.html?bauteile_index.html
Wähle dort im Dropdown-Feld "Transistor" aus.
----
Zum Ansteuern eines Pins eines ATtiny13 genügt es, wenn 1 µA Strom fließt. Das ist 0,000001 A.
Der 2N2222 hat einen Verstärkungsfaktor von mindestens 30. Und wir steuern diesen mit 12 Volt an.
(13,8 - 0,7) V / 0,000001 A = 13.100.000 Ohm
Aber ich glaube, dass der Transistor bei 13 MOhm nicht mehr reagieren würde. Deshalb bleibe ich dort bei 10 k.
mfg
Gerold
:-)
Fighter-2
24.02.2008, 18:40
Hey!
Gut habe das nun verstanden! :)
Aber mir ist eine Sache noch unklar!
"0,130 A * 13,8 V = 1,794 Watt"
Warum müssen wir den so einen Transistor dafür wählen?
Wenn am Transistor 0,7V abfallen, ergibt das ändere Wert für mich!
0,130A x 0,7V = 0,091 Watt
Oder meinst du, wenn der Transistor hochohmisch ist? :)
Dann wäre das auch wiederrum klar ^^
python_rocks
24.02.2008, 18:48
Aber mir ist eine Sache noch unklar!
"0,130 A * 13,8 V = 1,794 Watt"
Warum müssen wir den so einen Transistor dafür wählen?
Wenn am Transistor 0,7V abfallen, ergibt das ändere Wert für mich!
0,130A x 0,7V = 0,091 Watt
Hallo Chris!
Es fallen 0,7 V weg. Das stimmt. Aber der Rest muss durch den Transistor durch. Und dieser Rest wird mit 13,1 Volt durchgedrückt. Was dabei genau mit den 0,7 Volt passieren weiß ich jetzt gar nicht. Deshalb rechne ich lieber mit den vollen 13,8 V als mit 13,1 V.
(13,8 - 0,7) * 0,130 A = 1,703 Watt
mfg
Gerold
:-)
Fighter-2
24.02.2008, 19:19
Ja aber die vollen 13,8V fallen doch net an dem ab!
Ist doch nicht wie ein Wiederstand, der alles in Wärme verballert, oder?
Oder meinst du, wenn der nicht durchlässig ist?
python_rocks
24.02.2008, 19:50
Ja aber die vollen 13,8V fallen doch net an dem ab! Ist doch nicht wie ein Wiederstand, der alles in Wärme verballert, oder?Oder meinst du, wenn der nicht durchlässig ist?
Hallo Chris!
Das kann dir jemand der das gelernt hat sicher beantworten. Vielleicht geht es ja auch nicht darum, wieviel am Transistor abfällt, sondern einfach nur um die Menge die durch muss. Für viel Strom brauche ich ja auch dickere Kabel und für wenig Strom genügen dünnere Kabel. Kleiner Transistor -- großer Transistor. Je mehr Watt durch den Transistor durch müssen, desto größer muss er sein.
mfg
Gerold
:-)
python_rocks
25.02.2008, 17:59
Hallo Chris!
Ich habe jetzt ein wenig getestet.
Der Transistor an PB.4 ist komplet überflüssig. Er ist zu empfindlich und braucht zum störungsfreien Schalten einen zusätzlichen Pulldown-Widerstand. Dann bleibe ich doch lieber bei der Lösung mit dem Spannungsteiler.
Also hier der aktuelle Schaltplan:
http://halvar.at/krimskrams2/ruecklicht_mit_leds_attiny13_v11.gif
Und hier das neue Programm. Ich habe das Eingangssignal ein wenig entstört. Es wird jetzt drei mal hintereinander das Bremssignal geprüft und nur wenn dieses drei mal hintereinander auf 1 steht, dann gilt das Signal als störungsfrei. Ohne dieses Entstören schaffte ich es dauernd beim Berühren eines Drahtes ein Bremssignal auszulösen. Das ist jetzt nicht mehr.
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 5
$framesize = 20
Const Half_light = 40
Const Full_light = 255
'PWM-Ausgang
Pwm_out Alias Portb.0
Config Portb.0 = Output
'Bremslicht Eingang
Break_light_in Alias Pinb.4
Config Pinb.4 = Input
'Timer0 als PWM: 9600000 / 64 / 256 / 2 = 292,9 Hz
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 64
Pwm0a = Half_light
'Watchdog aktivieren
Config Watchdog = 512
Start Watchdog
'Rauschfreies Bremssignal
Declare Function Get_break_signal() As Byte
Do
If Get_break_signal() = 1 Then
Pwm0a = Full_light
Waitms 100
Pwm0a = Half_light
Waitms 100
Else
Pwm0a = Half_light
End If
Reset Watchdog
Loop
End
Function Get_break_signal() As Byte
Local Bt As Byte
For Bt = 1 To 3
Nop : Nop : nop
If Break_light_in = 0 Then
Get_break_signal = 0
Exit Function
End If
Next Bt
Get_break_signal = 1
End Function
Weiters habe ich den Watchdog Timer aktiviert. Falls der ATtiny13 einmal abstürzen sollte, dann wird dieser nach spätestens 512 ms neu gestartet.
Der µC-Teil der Schaltung funktionerte bei meinen Tests zwischen 7,5 und 13,8 Volt einwandfrei. Allerdings habe ich die 5 V Versorgung nicht nachgebaut. Diese kam vom Labornetzteil und änderte sich nie. Aber bei 7,5 V Eingangsspannung dürfte auch der LM78L05 noch schöne 5 V liefern. Ich hatte beim Test nur eine LED dran hängen. Deshalb kann ich nicht sicher beurteilen, wie die Schaltung funktioniert, wenn man 25 LEDs dran hängen hat. Das auszuprobieren bleibt bei dir hängen.
Jetzt möchte ich auch noch erklären, weshalb ich nicht auf eine Lösung mit einem ATmega32 eingegangen bin. Mit dieser ATtiny13-Schaltung hast du ein komplett unabhängiges Modul, welches du direkt in die Rückleuchte einbauen kannst. Komplett unabhängig von irgendwelchen anderen Mikrocontrollern und Funktionen. Wenn etwas kaput wird, dann tauscht du es einfach aus. Und wenn das Rücklicht oder das Bremslicht nicht funktionieren, dann weißt du sofort wo du nach einem Fehler zu suchen hast. Das sind in meinen Augen alles Vorteile gegenüber einer Zentralrechner-Strategie. Lieber kleine, überschaubare Module, als einen zentralen "Point of Failure", dessen Funktion kaum mehr durchschaubar ist.
Und noch etwas: Stecke den ATtiny13 in einen Sockel. Man hat ja nicht immer einen Computer in der Nähe, den man am Renngerät anstecken kann. Dann kann man zumindest den ATtiny13 ausbauen und zum Computer bringen.
mfg
Gerold
:-)
PS: Die Fuse- und Lock-Bits des ATtiny13 habe ich auf diesen Wert gesetzt:
Low Fuse: 01111010
High Fuse: 11111111
Lockbits: 11111111
- Serial program downloading (SPI) enabled; [SPIEN=0]
- Int. RC Osc. 9.6 Mhz; Start-up time: 14 Ck + 64 ms; [CKSEL=10 SUT=10]
- Brown-out detection disabled; [BODLEVEL=11]
- Mode 1: No memory lock features enabled
.
Fighter-2
25.02.2008, 18:23
Super genial! :)
Komme aus den Staunen nicht mehr raus!
Nur das mit dem Spannungsteiler kommt mir noch etwas komisch vor!
Am Eingang, vom Controller kommen also 4,3V an bei 12V, wenn ich mich nicht verrechnet habe!
Aber was ist, wenn die Batt mal extrem unter die 11V kommt?
Wäre da nicht son 7805 sehr praktisch? Das man die Abfrafe einfach mit dem 7805 macht!? ;)
Wäre ne Idee von mir! ODer bis wie viel Volt erkennt der Controller noch, das das Bremssingnal da ist? :)
Achja was sind die Fuse und Lockbits? :) Kann damit nichts anfangen! :)
LG Chris
python_rocks
25.02.2008, 18:32
Hallo Chris!
Aber was ist, wenn die Batt mal extrem unter die 11V kommt?
Ich habe das Labornetzteil bis 7,5 Volt runter geregelt. Also so lange du noch 7,5 Volt in dem Akku hast, funktioniert das Teil. Ob die LEDs dann auch noch leuchten, hängt von den LEDs ab.
Achja was sind die Fuse und Lockbits? :) Kann damit nichts anfangen!
Dann wird es Zeit, dass du ein Buch liest: http://halvar.at/elektronik/mikrocontroller_wie_anfangen/
https://www.roboternetz.de/wissen/index.php/Avr#Die_Fusebits
mfg
Gerold
:-)
Fighter-2
25.02.2008, 20:36
Muss ich die Werte unbedingt ändern? :)
ICh habe eben nochmal im Bascom geschaut, da habe ich nichts gefunden, wo man die ändern könnte! :)
Vorallem sagt mir
Serial program downloading (SPI) enabled; [SPIEN=0]
- Int. RC Osc. 9.6 Mhz; Start-up time: 14 Ck + 64 ms; [CKSEL=10 SUT=10]
- Brown-out detection disabled; [BODLEVEL=11]
- Mode 1: No memory lock features enabled
das garnichts ;)
ICh denke werde mir das Buch mal bestellen! :)
python_rocks
25.02.2008, 21:45
Muss ich die Werte unbedingt ändern? :)
ICh habe eben nochmal im Bascom geschaut, da habe ich nichts gefunden, wo man die ändern könnte!
ICh denke werde mir das Buch mal bestellen!
Hallo Chris!
Du musst die Werte nicht ändern. Man müsste dann aber das Programm anpassen und nochmal testen, da in der Standardeinstellung der ATtiny13 nicht mit 9,6 sondern mit 1,2 Mhz läuft. Du musst sowiso irgendwann mal lernen, wie man diese Bits setzt und was sie bedeuten. Also besser jetzt anfangen. :-)
Mit welchem Programm du die Fuse-Bits setzen kannst, hängt von dem Programmer ab den du verwendest. Was verwendest du denn für einen Programmer? Hast du einen Link zu diesem Gerät?
Das Buch von Roland ist sowiso, in meinen Augen, der Beste Tipp für den Einstieg. Auf Seite 173 http://www.rowalt.de/mc/avr/AvrbuchOnline/AvrLehrbuch173_653.htm erklärt er auch die Fuse-Bits.
mfg
Gerold
:-)
PS: So würde das Programm aussehen, wenn man den Takt nicht hoch setzt: http://paste.pocoo.org/show/29984/
Allerdings sollte man noch einmal testen ob die Reaktionszeiten noch im akzeptablen Bereich liegen. Ich werde es mal kurz durchprobieren.
PS2: Das ist schon noch schnell genug. Sieht nicht so schlecht aus. Der Vorteil eines µC ist, dass wir es jederzeit ändern können. ;-)
.
Fighter-2
25.02.2008, 21:57
Ich schreibe mit Bascom... das is doch auch mein Compiler oder net?
Mh... ich meine, man kann doch die Mhz auch im Bascom Prog rein schreiben oder nicht?
Werde mir mal die Sachen da druch lesen danke! :)
Echt cool das du mir so hilfst! :)
python_rocks
25.02.2008, 22:04
Ich schreibe mit Bascom... das is doch auch mein Compiler oder net?
Hallo Chris!
Wenn man von einem "Programmer" spricht, dann meint man das Gerät/Kabel mit dem das Programm vom Computer zum µC übertragen wird. Von diesem Gerät hängt auch ab, welches Programm man braucht um die Fuse-Bits setzen zu können. Ich habe z.B. den mySmartUSB http://myavr.de/shop/article.php?artDataID=36 und den Dragon http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3891
Der ATtiny13 lässt sich mit beiden Geräten programmieren und man kann mit beiden Geräten die Fuse-Bits ändern. Aber man braucht verschiedene Programme dazu.
mfg
Gerold
:-)
PS: Der Wert bei ``$crystal`` muss exakt der Wert sein, auf den der µC einstestellt ist. Man kann damit die Geschwindigkeit des µC nicht ändern. Man gibt damit Bascom nur einen Hinweis, wie schnell der µC ist, damit das Timing angepasst werden kann.
.
Fighter-2
26.02.2008, 19:00
Ich habe diesen !
http://img89.imageshack.us/img89/8140/dsc00200aw3.jpg
STK200/STK300 Programmer! ;)
Kann ich damit was anfangen?
Habe damit immer den Atmega8 im ISP beschrieben!
python_rocks
26.02.2008, 19:22
STK200/STK300 Programmer!
Hallo Chris!
Vielleicht kannst du damit sogar aus Bascom heraus die Fusebits schreiben. Also sicher bin ich mir nicht. Ich kann zwar mit meinem Programmer das Fenster für die Fuse-Bits anzeigen, aber diese werden von Bascom weder korrekt ausgelesen noch korrekt geschrieben.
http://halvar.at/krimskrams2/fusebits_bascom_menu.gif
http://halvar.at/krimskrams2/fusebits_bascom.gif
Ich nehme dafür immer ein anderes Programm. Aber vielleicht funktioniert es bei dir ja. Das sieht man, wenn man einen µC anschließt und das oben gezeigte Fenster öffnet.
Schicke mir doch bitte eine Screenshot vom oben gezeigten Fenster. Dann kann ich mehr dazu sagen.
mfg
Gerold
:-)
Fighter-2
26.02.2008, 19:41
Erstmal muss ich mir ja nen Boardbasteln! ;)
Dann kann ich ja erst den At... anfangen zu progen! ;)
Ach wir machen das schon! ;) Danke ;)
oder soll ich dir jetzt schon im Vorraus ein Bild machen?
python_rocks
26.02.2008, 20:00
oder soll ich dir jetzt schon im Vorraus ein Bild machen?
:-)
Hallo Chris!
Es ist egal, welchen µC du anschließt. Es geht nur darum, herauszufinden ob Bascom die Fusebits korrekt ausliest. Und da du noch nie Fusebits geändert hast, müssten die Originaleinstellungen des jeweiligen µC angezeigt werden.
mfg
Gerold
:-)
Fighter-2
26.02.2008, 20:08
Okay dann werfe ich gleichg mal das alte Atmegaboard ran! :D :D
Stammt noch aus alten SChulzeiten und sieht auch so aus! :D :D Die Lötstellen sind grausam :D :D
Fighter-2
26.02.2008, 20:57
Ich habe fest gestellt, das mein Programmer garnicht mehr richtig funktioniert!
bekomme keine Verbindung mehr hergestellt!
ICh denke ich werde den mySmartUSB per Paypal mal bestellen und noch andere KLeinigkeiten! :)
Aber mit dem wäre ich ja gut abgedeckt oder? :)
Bis wie viel kb geht das eigentlich bei den Atmegas hoch?
python_rocks
26.02.2008, 21:24
Aber mit dem wäre ich ja gut abgedeckt oder? :) Bis wie viel kb geht das eigentlich bei den Atmegas hoch?
Hallo Chris!
Ja. Der mySmartUSB ist keine schlechte Wahl.
Und mit der AVR-µC-Familie bist du ziemlich gut abgedeckt.
http://www.atmel.com/dyn/products/param_table.asp?family_id=607&OrderBy=part_no&Direction=ASC
Allerdings kannst du mit der Bascom Demo-Version nur Programme bis zu einer Größe von 4 kB schreiben. Willst du mehr, dann wirst du wohl auch die 80 Euronen für Bascom ausgeben müssen. Aber dafür bekommst du dann auch die neuere Version mit ein paar zusätzlichen Features.
Näheres kann ich dazu noch nicht sagen. Ich bekomme meine Vollversion erst wenn die von MCS Electronic vom Urlaub zurück sind. :-)
mfg
Gerold
:-)
PS: Es gibt jetzt auch eine neue Bascom-Demo: http://www.mcselec.com/index.php?option=com_content&task=view&id=208&Itemid=65
.
python_rocks
26.02.2008, 22:13
Hallo Chris!
Ich hatte im Beispielprogramm zu wenig Speicherplatz für den Frame reserviert. Framesize muss erhöht werden:
$framesize = 25
mfg
Gerold
:-)
Mit einem USB-Programmer kann man unter Bascom die Fusebits nicht verändern. Das geht nur mit einem "alten" Programmer oder eben über ein Zusatzprogramm.
python_rocks
27.02.2008, 19:56
Hallo Chris!
Das ging schneller als ich dachte. :-)
Der Testaufbau (genau so wie im Schaltplan) ist fertig. Es scheint alles zu funktionieren. :-)
Das war der erste Test:
http://halvar.at/krimskrams2/ruecklicht_mit_leds_attiny13__erster_testaufbau.jp g
Und so sieht es mit 25 LEDs aus:
http://halvar.at/krimskrams2/ruecklicht_mit_leds_attiny13__realtest_mit_25_leds .jpg
Video mit geringer Qualität -- dafür länger (2 MB):
http://halvar.at/krimskrams2/ruecklicht_mit_leds_attiny13__realtest_mit_25_leds _1.avi
Video mit etwas mehr Qualität -- dafür kürzer (3,7 MB):
http://halvar.at/krimskrams2/ruecklicht_mit_leds_attiny13__realtest_mit_25_leds _2.avi
mfg
Gerold
:-)
PS: Nach unten ist bei 9,5 Volt ist Schluss.
.
Fighter-2
28.02.2008, 00:07
Ich danke diaaaa! :)
Bor verdamt cool! :) habe nun alles bestellt was ich für mein Vorhaben brauchen werde! ;)
Danke danke danke! ;)
Fighter-2
28.02.2008, 00:53
Der Programmer is nun bestellt! ;)
python_rocks
05.03.2008, 09:23
Aber mir ist eine Sache noch unklar!
"0,130 A * 13,8 V = 1,794 Watt"
Warum müssen wir den so einen Transistor dafür wählen?
Wenn am Transistor 0,7V abfallen, ergibt das ändere Wert für mich!
0,130A x 0,7V = 0,091 Watt
Hallo Chris!
Es fallen 0,7 V weg. Das stimmt. Aber der Rest muss durch den Transistor durch. Und dieser Rest wird mit 13,1 Volt durchgedrückt. Was dabei genau mit den 0,7 Volt passieren weiß ich jetzt gar nicht. Deshalb rechne ich lieber mit den vollen 13,8 V als mit 13,1 V.
(13,8 - 0,7) * 0,130 A = 1,703 Watt
Hallo Chris!
Ich habe mich in dieser Beziehung ein wenig schlauer gemacht. Siehe: http://www.mikrocontroller.net/articles/Pulsweitenmodulation
Wenn der Transistor sperrt, dann fließt kein Strom. Dabei wird keine Leistung vom Transistor abgebaut.
Wenn der Transistor komplett offen ist, dann fließt der Strom fast ungehindert durch. Leistung wird nur für den 0,7 Volt Anteil im Transistor abgebaut.
Es ist also so wie du geschrieben hast. Für PWM würde ein kleinerer Transistor genügen. Einzig zum Entwickeln der Schaltung empfehle ich weiterhin einen stärkeren Transistor, da man nie ausschließen kann, dass der Transistor nicht doch kurzfristig mal nicht voll durchschaltet. Und wenn das der Fall ist, dann wird mehr Leistung über den Transistor abgebaut -- und schon ist er hin. Wobei mir jetzt auch einfällt, dass mir das schon mal passiert ist.
mfg
Gerold
:-)
PS: Halte uns doch bitte am Laufenden. ;-)
semperit
21.06.2008, 00:26
Hallo,
würde dein Code gern für mein Problem verwenden. nur habe ich ein problem das das PWM Signal im Normalbetriebe (keine Bremse betätigt) unsauber ist es springt ab und zu. hat jemand eine idee wie das bereinigt werden kann ?
Hallo Chris!
Ich habe jetzt ein wenig getestet.
Der Transistor an PB.4 ist komplet überflüssig. Er ist zu empfindlich und braucht zum störungsfreien Schalten einen zusätzlichen Pulldown-Widerstand. Dann bleibe ich doch lieber bei der Lösung mit dem Spannungsteiler.
Also hier der aktuelle Schaltplan:
http://halvar.at/krimskrams2/ruecklicht_mit_leds_attiny13_v11.gif
Und hier das neue Programm. Ich habe das Eingangssignal ein wenig entstört. Es wird jetzt drei mal hintereinander das Bremssignal geprüft und nur wenn dieses drei mal hintereinander auf 1 steht, dann gilt das Signal als störungsfrei. Ohne dieses Entstören schaffte ich es dauernd beim Berühren eines Drahtes ein Bremssignal auszulösen. Das ist jetzt nicht mehr.
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 5
$framesize = 20
Const Half_light = 40
Const Full_light = 255
'PWM-Ausgang
Pwm_out Alias Portb.0
Config Portb.0 = Output
'Bremslicht Eingang
Break_light_in Alias Pinb.4
Config Pinb.4 = Input
'Timer0 als PWM: 9600000 / 64 / 256 / 2 = 292,9 Hz
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 64
Pwm0a = Half_light
'Watchdog aktivieren
Config Watchdog = 512
Start Watchdog
'Rauschfreies Bremssignal
Declare Function Get_break_signal() As Byte
Do
If Get_break_signal() = 1 Then
Pwm0a = Full_light
Waitms 100
Pwm0a = Half_light
Waitms 100
Else
Pwm0a = Half_light
End If
Reset Watchdog
Loop
End
Function Get_break_signal() As Byte
Local Bt As Byte
For Bt = 1 To 3
Nop : Nop : nop
If Break_light_in = 0 Then
Get_break_signal = 0
Exit Function
End If
Next Bt
Get_break_signal = 1
End Function
Weiters habe ich den Watchdog Timer aktiviert. Falls der ATtiny13 einmal abstürzen sollte, dann wird dieser nach spätestens 512 ms neu gestartet.
Der µC-Teil der Schaltung funktionerte bei meinen Tests zwischen 7,5 und 13,8 Volt einwandfrei. Allerdings habe ich die 5 V Versorgung nicht nachgebaut. Diese kam vom Labornetzteil und änderte sich nie. Aber bei 7,5 V Eingangsspannung dürfte auch der LM78L05 noch schöne 5 V liefern. Ich hatte beim Test nur eine LED dran hängen. Deshalb kann ich nicht sicher beurteilen, wie die Schaltung funktioniert, wenn man 25 LEDs dran hängen hat. Das auszuprobieren bleibt bei dir hängen.
Jetzt möchte ich auch noch erklären, weshalb ich nicht auf eine Lösung mit einem ATmega32 eingegangen bin. Mit dieser ATtiny13-Schaltung hast du ein komplett unabhängiges Modul, welches du direkt in die Rückleuchte einbauen kannst. Komplett unabhängig von irgendwelchen anderen Mikrocontrollern und Funktionen. Wenn etwas kaput wird, dann tauscht du es einfach aus. Und wenn das Rücklicht oder das Bremslicht nicht funktionieren, dann weißt du sofort wo du nach einem Fehler zu suchen hast. Das sind in meinen Augen alles Vorteile gegenüber einer Zentralrechner-Strategie. Lieber kleine, überschaubare Module, als einen zentralen "Point of Failure", dessen Funktion kaum mehr durchschaubar ist.
Und noch etwas: Stecke den ATtiny13 in einen Sockel. Man hat ja nicht immer einen Computer in der Nähe, den man am Renngerät anstecken kann. Dann kann man zumindest den ATtiny13 ausbauen und zum Computer bringen.
mfg
Gerold
:-)
PS: Die Fuse- und Lock-Bits des ATtiny13 habe ich auf diesen Wert gesetzt:
Low Fuse: 01111010
High Fuse: 11111111
Lockbits: 11111111
- Serial program downloading (SPI) enabled; [SPIEN=0]
- Int. RC Osc. 9.6 Mhz; Start-up time: 14 Ck + 64 ms; [CKSEL=10 SUT=10]
- Brown-out detection disabled; [BODLEVEL=11]
- Mode 1: No memory lock features enabled
.
python_rocks
21.06.2008, 01:33
nur habe ich ein problem das das PWM Signal im Normalbetriebe (keine Bremse betätigt) unsauber ist es springt ab und zu.
Hallo semperit!
Du kannst die Prüfung, ob die Bremse gedrückt wurde, ein wenig verlängern.
Statt
Nop : Nop : nop
könntest du
waitus 1
ausprobieren.
Vielleicht war es das. Du kannst auch mit höheren Werten experimentieren.
WAITUS --> http://avrhelp.mcselec.com/index.html?waitus.htm
mfg
Gerold
:-)
semperit
21.06.2008, 01:57
hab ne lösung gefunden, habe eine pull-up von 10K an den PortB.4 gehangen damit geht es super sauber. Jetzt muss ich nur noch das kleine Problem lösen das PWM Signal genau auf 25 Hz ein zu stellen. kann man im PWM-Mode auch den Timer0 = wert anweisen um die Frequenz genau ein zu stellen ?
semperit
21.06.2008, 02:18
noch ne frage - kann das PWM Signal eigentlich immer nur an PB.0 ausgegeben werden ? brächte noch ein 2'es PWM Ziel ist 2 PWM's mit 20/80'er Auflösung mit je einen weiteren Pin um zu schalten in 20/80 und 80/20 bei 25Hz.
guten Nacht ;-)
python_rocks
21.06.2008, 11:06
brächte noch ein 2'es PWM
Hallo semperit!
UNGETESTET:
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64
Damit solltest du nicht nur PWM0A, sondern auch PWM0B (an PB1) zur Verfügung haben.
mfg
Gerold
:-)
PS: Mit einer Taktfrequenz von 9,6 MHz und einem Prescaler von 1024, solltest du auf ca. 36,6 Hz PWM-Frequenz kommen.
9600000/1024/256 = 36,62109375
Um genau auf 25 Hz zu kommen, müsstest du den ATtiny13 extern mit 6553600 Hz takten. Dieser Takt müsste an PB3 angeschlossen werden. Das wird wohl nichts.
25 * 256 * 1024 = 6553600
.
semperit
21.06.2008, 14:20
für die einstellbare Frequenz habe ich eine Lösung gefunden
$regfile = "ATtiny13.dat"
'$crystal = 4800000
Dim Hi As Byte
Dim Lo As Byte
Dim Phase As Bit
Dim Get_break_signal As Bit
Dim B As Byte
Const Reload = 95 'um 24 Hz zu erzeugen 4,8Mhz/8/64
$hwstack = 10 'Eingefügt Weil die Standardvorgaben
$swstack = 10 'für den Tiny13 zu
$framesize = 20 'hoch sind.
Ddrb = &B00000011
Portb = &B00000100
Lo = Reload - 13
Hi = Reload - Lo
Phase = 1
Config Timer0 = Timer , Prescale = 8
On Timer0 Timer_isr
Enable Timer0
Enable Interrupts
Declare Function Get_break_signal() As Byte
Do
nop
Loop
Timer_isr:
If Phase = 1 Then
If Get_break_signal() = 1 Then
Portb.0 = 1
Else
Portb.0 = 0
End If
Portb.1 = 0
Load Timer0 , Lo
Phase = 0
Else
If Get_break_signal() = 1 Then
Portb.0 = 0
Else
Portb.0 = 1
End If
Portb.1 = 1
Load Timer0 , Hi
Phase = 1
End If
Return
Function Get_break_signal() As Byte
Local Bt As Byte
For Bt = 1 To 3
If Portb.2 = 0 Then
Get_break_signal = 0
Exit Function
End If
Next Bt
Get_break_signal = 1
End Function
Nur regiert der µC nicht darauf wenn ich PB.2 auf Masse ziehe. Dann sollte das PWM Signal sich eigentlich ändern.
Spaceman25
28.04.2014, 07:36
Hallo ihr Bremslichtbastler,
auch wenn das Thema schon 6 Jahre zurückliegt hab ich noch eine Frage dazu. Kann man die Schaltung auch so umbauen, dass es für das Bremslicht kein zweite 12 Volt Leitung benötigt wird? Ich habe mir vorgestellt, dass man ein zweite Masse dafür benutzt. Da könnte man einfach einen Bremslichtschalter nehmen der nur ein Kabel hat und die Masse schließt.
Viele Grüße
Lars
021aet04
01.05.2014, 21:29
Grundsätzlich ist es möglich. Am einfachste wäre es wenn du einen "Hauptschalter" einbaust, der die Schaltung mit der Versorgung verbindet. Die beiden Schalter für Rücklicht und Bremslicht würde ich auf einen Eingang geben (z.B. PB3 Rücklicht, PB4 Bremslicht) und gegen Masse schalten. Du musst jedoch einen Pullup einbauen bzw einschalten. Das Programm musst du jedoch umschreiben. Ich würde mir auch noch Gedanken über die Stromversorgung machen (z.B. Schaltwandler), damit die Effizienz gesteigert wird.
MfG Hannes
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.