Hi ! Der angehängte C Code bewirkt in seiner Hauptfunktion, dass auf PD5 eine Spannung von 0 bis 5V ausgegeben wird. Ich vermute mal per PWM. Es ist sicher möglich auf einem anderen Pin exakt das selbe auszugeben, ich habe aber keine Ahnung wie. Der Grund is, dass ich gerne mehr als 40mA ziehen würde. Mit 80mA könnte ich leben. Der Code kann noch weit mehr als das beschriebene. Benutzt wird aber mit Ausnahme der Schalter (bei mir Jumper auf Steckbrücken) nur der PD5 und halt reset. Ich habe falls notwendig, den Schaltplan auch mal angehangen. Ich finde einfach nich diese verfluchte Stelle wo der Port definiert wird...
Wieso findest du die Stelle nicht. PWM läuft entweder über Timer 0 oder über Timer 1. Im Programm wird ist die Stelle doch zu finden. Schau mal hier: // DIP-switches (PB0..5) as input w/ pullup PORTB = (uint8_t)(~(3<<6)); // LED2 and 3 as output, Motor-PWM as output, ON/OFF switch as input w/ pullup, Remote-Switches as input w/ pullup DDRD = _BV(PD2) | _BV(PD3) | _BV(PD5); PORTD = _BV(PD0) | _BV(PD1) | _BV(PD4); MOTOR_SPEED = 0; // Non-Inverting 8 bit phase correct PWM (MAX=0xFF) on PD5, no prescaler TCCR0A = _BV(COM0B1) | _BV(WGM00); TCCR0B = _BV(CS00);
Tim schrieb: > Es ist sicher möglich auf einem anderen Pin exakt das selbe auszugeben, > ich habe aber keine Ahnung wie. > Der Grund is, dass ich gerne mehr als 40mA ziehen würde. Mit 80mA könnte > ich leben. Und das für 4 Ausgänge? 4 * 80 = 320 Schau mal im Handbuch unter Maximum Ratings: DC Current VCC and GND Pins .... 200.0 mA Das heißt, dass Du nicht automatisch, weil Du an einem Ausgang 40 mA ziehen darfst, an 8 Ausgängen 320 mA ziehen darfst. Außerdem ist es einfach unschön, 2 Ausgänge zusammen zu legen, z.B. weil ein Programmierfehler dazu führt, dass hohe Ströme fließen, die den AVR schnell altern lassen. Irgendwo wirst Du noch Platz für 4 MOSFETs in Deinem Layout finden, oder?
Tim schrieb: > Der angehängte C Code bewirkt in seiner Hauptfunktion, dass auf PD5 eine > Spannung von 0 bis 5V ausgegeben wird. Eher nicht, damit könnte der FET nix gescheites anfangen. > Ich vermute mal per PWM. PWM ist sehr wahrscheinlich, denn PD5 ist OC0B, der zweite PWM-Ausgang des Timer0. > Es ist sicher möglich auf einem anderen Pin exakt das selbe auszugeben, > ich habe aber keine Ahnung wie. Ja, man könnte die andere Compare-Einheit des Timer0 benutzen, deren PWM-Ausgang OC0A auf PB2 liegt. Damit würdest Du Dein Problem aber nicht lösen. > Der Grund is, dass ich gerne mehr als 40mA ziehen würde. Mit 80mA könnte > ich leben. Vergiss es. Nimm lieber einen zeitgemäßen LL-FET wie z.B. den IRLU024N, der kann bei Ansteuerung über 39 Ohm direkt aus der AVR-PWM immernoch gute 5 A liefern und bleibt dabei eiskalt. Und das bei PWM-Frequenzen über 20 kHz. Im Gartenbahn-Lokfahrtregler benutze ich den IRLU024N mit 28,8 kHz PWM-Frequenz auch für schwere Loks mit mehreren Motoren. Dabei betreibe ich den Tiny2313 direkt aus der unteren Li-Zelle des dreizelligen Akkus, also mit 3,0 bis 4,2 V. Geht wunderbar. ...
Danke für eure Antworten! @Hannes Lux: Ich habe bereits nen LL-FET drann. Die Ansteuerung des FETs tuts auch wunderbar ohne Probleme. Aber ihr kennt das ja. Man is ja nie zufrieden oder ? ;D Und zwar habe ich mir noch ne Anzeige der aktuellen Spannung dazugebastelt. Schaltplan habe ich mal angehängt. Habe ich leider nur als JPG. Istn Scan. Ich persönlich find die Schaltung super und die tuts auch. Zur Erklärung: Wenn der Trimmer (bei mir glaub ich mittlerweile nur ein 1K Poti) korrekt eingestellt ist, kann schaltet bei jedem 0.6V Schritt ein weiterer Transistor durch. Sprich bei 5V leuchten bei mir alle 5LEDs. Problem: Ich habe die Schaltung 8mal. Eine Reihe BC550Cs die sich jeweiles ja auch mit ein "paar" mA begnügen. Ich könnte alle 8 Anzeigen wahrscheinlich mit exakt 40mA anfahren. Aber ich hatte nicht genug bc550c's so dass ich 4 Platinen mit BC337-25 bestückt hab. Klappt natürlich auch. Allerdings brauchen die halt mehr Saft. Von daher meine Idee mit dem 2ten Port. Bin für alle Ideen offen. :)
Hannes Lux schrieb: >> Es ist sicher möglich auf einem anderen Pin exakt das selbe auszugeben, >> ich habe aber keine Ahnung wie. > > Ja, man könnte die andere Compare-Einheit des Timer0 benutzen, deren > PWM-Ausgang OC0A auf PB2 liegt. Damit würdest Du Dein Problem aber nicht > lösen. Kannst du mir das im Code für mich ändern? Wäre super lieb von dir :) PB2 hat allerdings standardmäßig irgend ne Funktion. Soll laut Schaltplan ja auf GND schaltbar sein und das bewirkt dann _irgendwas. Keine Ahnung ob sich daraus nen Problem ergibt, wenn man ihn für PWM misbraucht. Denke aber eher nicht.
Tim schrieb: > Kannst du mir das im Code für mich ändern? Nein. Mit C habe ich nichts am Hut, ich programmiere AVRs in Assembler. Tim schrieb: > Keine Ahnung ob sich daraus nen Problem ergibt Mit Sicherheit gibt es ein Problem, wenn man den neuen PWM-Pin nicht in der Schalterabfrage deaktiviert. Außerdem sehe ich keinen Sinn darin, die PWM von einem Pin auf einen anderen Pin zu legen. Mehr Strom bekommst Du dadurch nicht. Und Aufgaben, die keinen Sinn ergeben, erledige ich nicht bzw. nur sehr ungern. ...
Warum bekomm ich nich mehr Strom wenn ich einen Pin zusätzlich verwende? Wie bereits erwähnt: 80mA reichen mir dicke.
Oha Assembler ;) Guter Mann! Könnte man nich alternativ auch nen 2ten AVR nehmen, der auf einem Pin dem PWM Signal lauscht und es auf nem andren Pin wieder exakt so ausgibt?
Tim schrieb: > Warum bekomm ich nich mehr Strom wenn ich einen Pin zusätzlich verwende? Von zusätzlich war keine Rede. > Wie bereits erwähnt: 80mA reichen mir dicke. Dann nimm einen geeigneten Treiber für die FETs. Es gibt da zwar allerhand Spezial-Gedöns, ich verwende dazu aber gerne den L272. Der ist einfach zu handhaben, lässt sich wunderbar vom AVR aus ansteuern und liefert ein gutes halbes Ampere Gate-Umladestrom im Push-Pull-Betrieb. Tim schrieb: > Oha Assembler ;) Warum nicht? Ist nunmal am nächsten am Maschinencode dran und bereitet dadurch die wenigsten Missverständnisse. > Guter Mann! Nööö, einfacher Hobby-Bastler. Die "guten Männer" hier benutzen meist C, können aber durchaus auch AVR-Assembler. > Könnte man nich alternativ auch nen 2ten > AVR nehmen, der auf einem Pin dem PWM Signal lauscht und es auf nem > andren Pin wieder exakt so ausgibt? Dazu reichen ein paar Transistoren oder der bereits erwähnte L272. ...
Hannes Lux schrieb: >> Wie bereits erwähnt: 80mA reichen mir dicke. > > Dann nimm einen geeigneten Treiber für die FETs. Es gibt da zwar > allerhand Spezial-Gedöns, ich verwende dazu aber gerne den L272. Der ist > einfach zu handhaben, lässt sich wunderbar vom AVR aus ansteuern und > liefert ein gutes halbes Ampere Gate-Umladestrom im Push-Pull-Betrieb. Ich glaube hier liegt ein Missverständnis vor. Warum der Plural von "FET" ? Ich habe nur einen einzigen LL N Channel FET und der steuert sauber durch. >> Könnte man nich alternativ auch nen 2ten >> AVR nehmen, der auf einem Pin dem PWM Signal lauscht und es auf nem >> andren Pin wieder exakt so ausgibt? >Dazu reichen ein paar Transistoren oder der bereits erwähnte L272. Mein Problem bei Einsatz von Transistoren als Treiber ist immer der Spg. Abfall von 0.6V. Meine Anzeigen brauchen die komplette 5V "Range". Habe ich nur 0.6V weniger von Umax an meiner Anzeige, bleib die "höchste" LED aus. Deswegen zapf ich ja das PWM direkt am Pin ab und treibe das nicht nochmal extra. Wie müsste ich den: http://www.fairchildsemi.com/ds/L2/L272.pdf beschalten? Bleibt da mein PWM Umax von 5V erhalten ?
Wenn ich das richtig sehe, geht es nur darum, je 7 LEDs mit wenig Pins anszusteuern. Dann ist doch ein 74HC595 je 8 LEDs die ideale Lösung. Einfach kaskadierbar und braucht insgesamt nur 3 IO-Pins vom MC. Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.