Nach dem Subject habe ich mich gefreut endlich mal zu sehen, wie ein Mikrocontroller blinkt, aber jetzt blinkt doch wieder nur eine LED.
Hoffentlich passt der Vorwiderstand.
Entscheidend ist aber die Rueckverguetung von Microchip bzw. ST, die man sicherlich beantragen kann, wenn man fuer seine Software nicht alles Flash/RAM benoetigt.
Fun fact: Auf einem 555 Microcontroller braucht eine blinkende LED nur 0 Byte. Beat dis!
10.2.2 Toggling the Pin
Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn. Note that the SBI instruction can be used to toggle one single bit in a port.
Entscheidend ist aber die Rueckverguetung von Microchip bzw. ST, die man
sicherlich beantragen kann, wenn man fuer seine Software nicht alles
Flash/RAM benoetigt.
Fun fact: Auf einem 555 Microcontroller braucht eine blinkende LED nur 0
Byte. Beat dis!
scnr,
WK
Das dürfte auch ganz ohne IC funktionieren, Zeitglieder lassen sich auch mit einfachen RC Schaltungen realisieren...
10.2.2 Toggling the Pin
Writing a logic one to PINxn toggles the value of PORTxn, independent on
the value of DDRxn. Note that the SBI instruction can be used to toggle
one single bit in a port.
Muss aber
1
PINB=0x01;
heißen. Ist zwar hier nicht relevant, aber ansonsten würdest du auch alle Bits toggeln, die im Register bereits 1 sind.
Hallo Peter,
Die _delay_ms-Funktion hast du aber unterschlagen...
Nein, hat er nicht. Das ist die Zählschleife, und die steht ja sogar als Kommentar drüber. _delay_ms() selbst ist ein inline, das die Anzahl der benötigten Zyklen ermittelt und anschließend damit __builtin_avr_delay_cycles() befüttert – die, wie der Name sagt, ein Builtin des AVR-GCC ist und damit von diesem direkt aufgelöst wird.
10.2.2 Toggling the Pin
Writing a logic one to PINxn toggles the value of PORTxn, independent on
the value of DDRxn. Note that the SBI instruction can be used to toggle
one single bit in a port.
Muss aber PINB = 0x01;
heißen. Ist zwar hier nicht relevant, aber ansonsten würdest du auch
alle Bits toggeln, die im Register bereits 1 sind.
Der AVR-GCC übersetzt schon richtig zu SBI und lt. Note ändert das nur den einen Pin.
Nur beim ADCSRA-Register löscht ein SBI/CBI immer auch das ADIF-Bit:
Beware that if doing a Read-Modify-Write on ADCSRA, a pending interrupt can be disabled. This also applies if the SBI and CBI instructions are used.
Und beim ACSR-Register müßte das ACI-Bit auch mit gelöscht werden, steht aber nicht im Datenblatt.
Ja, so etwa 23 Transistoren. Heute herrscht halt der Trend vor, auch simple Aufgaben mit übermäßig komplexen Lösungen zu erschlagen.
Anbei eine Blinkschaltung aus einem Experimentierkit für Teenager aus den 80ern.Dda kommt man mit zwei Transistoren aus. Dafür hat's Altersgerechte Erklärungen und Ausführungen bezüglich realem Einsatz.
Dafür hat's
Altersgerechte Erklärungen und Ausführungen bezüglich realem Einsatz.
Ja, ja. Das waren noch Zeiten.
Diese Art der Schaltung bildete bei mir in den 60er Jahren des vorigen Jahrhunderts die Grundlage für den Austausch des Blinkgebers am Motorrad. (mechanisch --> elektronisch)
Anbei eine Blinkschaltung aus einem Experimentierkit für Teenager aus
den 80ern.Dda kommt man mit zwei Transistoren aus.
Scheinbar hast du das Eröffnungsvideo nicht angeschaut. Wichtig ist aber trotzdem Kommentare abzugeben.
Anbei eine Blinkschaltung aus einem Experimentierkit für Teenager aus
den 80ern. Da kommt man mit zwei Transistoren aus.
Scheinbar hast du das Eröffnungsvideo nicht angeschaut. Wichtig ist aber
trotzdem Kommentare abzugeben.
????
Wichtig ist aber trotzdem Kommentare abzugeben.
Das Hauptmerkmal dieses Forums.
Ein Kennzeichen mancher Foristen hier ist anscheinend die billige Provokation durch an den Haaren herbeigezogener Argumente. Wohl weil einem die Sachargumente ausgegangen sind.
Hoffentlich passt der Vorwiderstand.
Also die Schaltungsauslegung ist IMHO nicht besonders smart, der kleine µC kann lediglich 25 mA ab und schon an einem einzelnen der 22 GPIO-Pins wird ca. 15% dieses Strombudgets verheizt.
Ja diese kleinen Kerlchen brauchen schon fast zum Schalten von mehreren LED's Schalttransistoren, um nicht von den Strömen gegrillt zu werden.
Also die Schaltungsauslegung ist IMHO nicht besonders smart, der kleine
µC kann lediglich 25 mA ab und schon an einem einzelnen der 22 GPIO-Pins
wird ca. 15% dieses Strombudgets verheizt.
Ja diese kleinen Kerlchen brauchen schon fast zum Schalten von mehreren
LED's Schalttransistoren, um nicht von den Strömen gegrillt zu werden.
Magst du dies Aussage mal mit Zahlen und Zitaten aus dem Datenblatt belegen. Ich komme auf Werte die mindestens eine Größenordung abweichen und würde gerne wissen wie du auf deine Werte kommst.
Magst du dies Aussage mal mit Zahlen und Zitaten aus dem Datenblatt
belegen. Ich komme auf Werte die mindestens eine Größenordung abweichen
und würde gerne wissen wie du auf deine Werte kommst.
Einfach mal im Datenblatt des STM32L432 nach eingespeisten Strömen (injected current) suchen. Da steht was von 25 mA, die der weg senken kann.
Zu der Thematik gibt es auch eine Application Note bzgl. (Power-)LED:
Einfach mal im Datenblatt des STM32L432 nach eingespeisten Strömen
(injected current) suchen. Da steht was von 25 mA, die der weg senken
kann.
"injected current" ist aber wenn z.B. 5V über einen Vorwiderstand an den 3.3V Port eingespeist werden und Richtung VDD über die Schutzdioden abfließen.
Da gehts aber um LEDs mit >= 25mA. Das funktioniert an einem einzelnen Pin nicht. Hat aber wiederrum nichts mit dem "injected current" zu tun. Die LED im Video wird mit ca. 2mA betrieben und der verwendete µC verträgt 100mA durch einen VDD Pin bzw. 140mA in Summe.
IMHO
Die LED im Video wird mit ca. 2mA betrieben und der verwendete µC
verträgt 100mA durch einen VDD Pin bzw. 140mA in Summe.
Nach dem Video sind es eher 4 mA (die Flussspannung der LED muss man anhand der Farbe raten) und nach der im Video gezeigten Beschaltung auf dem Steckbrett wird der Strom in den Controller getrieben.
Ist bei einer einzelnen LED wie beschrieben im grünen Bereich, bei einer Massenbeschaltung ist man eher mit Schalttransistoren als minimale externe Schutzbeschaltung auf der langlebigeren Seite.
IMHO
Die LED im Video wird mit ca. 2mA betrieben und der verwendete µC
verträgt 100mA durch einen VDD Pin bzw. 140mA in Summe.
Nach dem Video sind es eher 4 mA (die Flussspannung der LED muss man
anhand der Farbe raten) und nach der im Video gezeigten Beschaltung auf
dem Steckbrett wird der Strom in den Controller getrieben.
Ja, der strom fließt in den Controller. Aber es ist kein "injected current" da er eben nicht über die Schutzdiode gegen VDD fließt sondern mit dem Low-Side Transistor gegen Masse geschaltet wird. Und damit gilt der Grenzwert von 25mA nicht.
Kurzer Test mit einem Nucleo-F446RE um die eingebaute LED an PA5 blinken zu lassen: 40 Bytes, davon 8 Bytes für den obligatorischen Reset Vektor und den Initialwert für den Stack. PA5 wird wie vorgesehen als Ausgang verwendet. Die Ein-/Auszeit beim Blinken beträgt ca. eine halbe Sekunde.
OK, korrekterweise muss man noch das Konfigurationsbit mitzählen um IWDG als Hardware Watchdog zu konfigurieren, der ist für das Blinken zuständig.
Die 32 Byte Code sind ja auch schnell disassembliert (das sind 16 Assembler Befehle).
Assembler Code mit ein paar Kommentaren siehe Anhang. Man kann alternativ die IO Adressen als Konstanten ablegen und PC relativ laden, das sollte aber keinen Unterschied in Bezug auf die Code-Größe machen.
Eine eigene Frage?
Dieser Thread ist über ein Jahr alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.