Forum: Mikrocontroller und Digitale Elektronik PWM Signal auf anderen Pin klonen ATTINY2313


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Tim (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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...

von Starkstromer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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);

von Dünnpfeifer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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?

von Hannes L. (hannes)


Bewertung
0 lesenswert
nicht lesenswert
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.

...

von Tim (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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. :)

von Tim (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Hannes L. (hannes)


Bewertung
0 lesenswert
nicht lesenswert
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.

...

von Tim (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Warum bekomm ich nich mehr Strom wenn ich einen Pin zusätzlich verwende?
Wie bereits erwähnt: 80mA reichen mir dicke.

von Tim (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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?

von Hannes L. (hannes)


Bewertung
0 lesenswert
nicht lesenswert
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.

...

von Tim (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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 ?

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.