Nach langem suchen im Netz, und nur begrenztem fündig werden...
(vielleicht habe ich ja was übersehen...)
Zu einzelnen AVRs findet sich was.
Und in den Datenblättern natürlich auch. Aber das sind dann leider viele
Datenblätter, welche studiert werden wollen.
Darum meine Frage:
Welche AVRs toggeln ihre Pins, wenn man das betreffende PIN Register
beschreibt?
Gibt es irgendwo eine Liste dieser Prozessoren?
Irgendein Unterscheidungskriterium?
z.B. eine (Präprozessor) Konstante
Ich würde mich sehr freuen, wenn es da schon was fertiges gibt.
Und ihr mir den Stubs in die richtige Richtung gebt.
Wenn nicht, dann eben Fleißarbeit....
Zwecke des ganzen:
Es soll eine für Arduinos geeignete Lib werden.
Im Anhang der jetzige Zustand der Lib
Das Problem:
1
digitalWrite(13,!digitalRead(13));
Dieses braucht viele Takte.
Manchmal zu viele.
Ich möchte eher sowas wie:
Arduino F. schrieb:> Dieses braucht viele Takte.> Manchmal zu viele.
So ist das eben.
1) die Arduino Lib Schreiber haben schon das "Optimalste"
herausgeholt.
2) entweder du lebst mit den Libs so wie sie sind. Mit
dieser Eine-für-Alles Strategie sind viele Arduino Benutzer
glücklich gemacht worden.
Oder du löst dich vom Einheits-Brei der aufgrund von Standards
einen gewissen Overhead erzeugt und schreibst deine eigenen
Dinge optimiert auf deine Bedürfnisse. Die Eierlegende
Wollmilchsau die auch noch optimal schnell ist wird es jeden-
falls nicht geben.
Schneller als so geht es sowieso nicht.
Arduino F. schrieb:> #ifndef FAST_TOGGLE_PIN_OPTION> PORTB ^= _BV(5);> #endif
Ausgenommen ATXmega ....
Arduinoquäler schrieb:> Schneller als so geht es sowieso nicht.>> Arduino F. schrieb:>> #ifndef FAST_TOGGLE_PIN_OPTION>> PORTB ^= _BV(5);>> #endif
Das braucht 4 Takte, oder so.
PINB = _BV(5);
Kommt mit 2 Takten hin, wenn es denn der µC kann...
Arduino F. schrieb:> Kommt mit 2 Takten hin, wenn es denn der µC kann...
Mag sein dass du nur zwei Takte brauchst, aber ob du
damit einen Ausgang togglen kannst ..... ?
Arduinoquäler schrieb:> Mag sein dass du nur zwei Takte brauchst, aber ob du> damit einen Ausgang togglen kannst ..... ?
Darum geht es doch, duh. Viele neuere AVR können eben den Ausgangspin
togglen, wenn man eine 1 ins entsprechende Bit des PIN Registers
schreibt.
Aber ein Kriterium dafür ist mir nicht bekannt, bzw. welcher AVR das als
erster konnte.
@ Arduinoquäler (Gast)
>> Kommt mit 2 Takten hin, wenn es denn der µC kann...>Mag sein dass du nur zwei Takte brauchst, aber ob du>damit einen Ausgang togglen kannst ..... ?
Ja, kann er. RTFM!
"However, writing a logic one to a bit in the PINx Register, will result
in a toggle in the corresponding bit in the Data Register."
@ Arduinoquäler (Gast)
>1) die Arduino Lib Schreiber haben schon das "Optimalste">herausgeholt.
Das halte ich für fragwürdig. Man muss die Portzugiffe nicht zu Laufzeit
dekodieren, das kann ein vernünftige Lösung auch zur Compilierungszeit.
Falk B. schrieb:> Ja, kann er.
Jetzt fällt es mir wie Schuppen von den Haaren, ich habs
schon mal gelesen aber wieder vergessen.
Falk B. schrieb:> Das halte ich für fragwürdig. Man muss die Portzugiffe nicht zu Laufzeit> dekodieren, das kann ein vernünftige Lösung auch zur Compilierungszeit.
Na dann mal 'ran, lieber Herr Brunner.
Was lässt sich denn bei einem SBI(portnr, bitnr) noch vor der
Laufzeit optimieren wenn die Parameter schon fest vorberechnet
vorliegen?
Falk B. schrieb:> Man muss die Portzugiffe nicht zu Laufzeit> dekodieren, das kann ein vernünftige Lösung auch zur Compilierungszeit.
Ja!
Und die Timer Register muss man dabei nicht auch noch jedes Mal
manipulieren.
(PWM auf dem Pin abschalten)
@ Arduinoquäler (Gast)
>> Das halte ich für fragwürdig. Man muss die Portzugiffe nicht zu Laufzeit>> dekodieren, das kann ein vernünftige Lösung auch zur Compilierungszeit.>Na dann mal 'ran, lieber Herr Brunner.
Ich kann kein C++ 8-0
>Was lässt sich denn bei einem SBI(portnr, bitnr) noch vor der>Laufzeit optimieren wenn die Parameter schon fest vorberechnet>vorliegen?
Gar nichts. Aber das war auch gar nicht das Thema, sondern das leidige
digitalWrite() vom Arduino.
Arduino F. schrieb:> Welche AVRs toggeln ihre Pins, wenn man das betreffende PIN Register> beschreibt?> Gibt es irgendwo eine Liste dieser Prozessoren?
Nein, gibt es nicht.
> Irgendein Unterscheidungskriterium?
Neuere AVRs können das. Eine Liste von "Neueren AVRs"? Mir nicht
bekannt.
Würde mir einen µC, der sonst den Ansprüchen genügt heraussuchen und
dann das Datenblatt daraufhin abklopfen.
bench schrieb:> Neuere AVRs können das. Eine Liste von "Neueren AVRs"? Mir nicht> bekannt.
Der erste mir bekannte Typ war der ATtiny2313.
Man kann das auch umgekehrt machen. Hauptsächlich die AT90SNNNN, daran
orientierte ATmegaNNNN wie ATmega8535, die alten Klassiker
ATmega8/16/64/128 sind draussen, und ein paar alte weniger systematisch
erfassbare ATtiny.
Arduinoquäler schrieb:> Was lässt sich denn bei einem SBI(portnr, bitnr) noch vor der> Laufzeit optimieren wenn die Parameter schon fest vorberechnet> vorliegen?
Für mich ist die Ausgangsposition die Arduino Welt.
Und da zeigt sich, dass man mit so was, auf einem Arduino UNO, um 50kHz
Rechteck zustande bekommt
Hallo,
wenn ich das schnell brauche schreibe ich es eben so rein.
PINB = (1<<PB5);
Wenn ich es auch noch taktgenau brauche, dann starte ich das alte
AVR-Studio und werfe den ASM an und zähle Takte.
Arduino ist für mich aus 2 Gründen in den Hobbykreis gekommen:
Die billigen Module um Zeit und Arbeit zu sparen.
Die vorhandenen Libs, um Zeit und Arbeit zu sparen.
Das kommt den "kleinen Projekten zwischendurch" sehr entgegen.
PS: da ich in letzter Zeit viel mehr ESP8266 als ATMega programmiere,
hätte ich ohnehin nichts davon.
Was willst Du dem User einer solchen Lib mit an die Hand geben?
Das er statt der Arduino-Pinnummer jetzt Port und Pin des AVR nehmen
soll?
Das eben kann er jetzt ohne weitere Änderungen auch schon, wenn er weiß,
wie es geht.
Gruß aus Berlin
Michael
Arduino F. schrieb:> Zwecke des ganzen:> Es soll eine für Arduinos geeignete Lib werden.Arduino F. schrieb:> Und da zeigt sich, dass man mit so was, auf einem Arduino UNO, um 50kHz> Rechteck zustande bekommt
Ja .... und wenn du dann deine Kreation als Lib anbietest die
genau so universell verwendbar ist dann endest du genau dort wo
die Arduino Lib Väter ihre Konvergenzlinie gesehen/gezogen haben.
Matthias S. schrieb:> Aber ein Kriterium dafür ist mir nicht bekannt,....
Danke.(schade)
Falk B. schrieb:> Aber das war auch gar nicht das Thema, sondern das leidige> digitalWrite() vom Arduino.
Ja!
bench schrieb:> Mir nicht bekannt.
Danke! (und Schade)
A. K. schrieb:> Der erste mir bekannte Typ war der ATtiny2313.>> Man kann das auch umgekehrt machen. Hauptsächlich die AT90SNNNN, daran> orientierte ATmegaNNNN wie ATmega8535, die alten Klassiker> ATmega8/16/64/128 sind draussen, und ein paar alte weniger systematisch> erfassbare ATtiny.
Beim suchen und erfassen, wird mir das helfen.
Michael U. schrieb:> willst Du dem User einer solchen Lib mit an die Hand geben?
Ja...
Aber Vorrangring ist das für mich.
In der Beziehung bin ich Egoist.
Wenn es sonst noch jemand mag, nur zu... er/sie/es möge es nutzen...
Michael U. schrieb:> wenn ich das schnell brauche schreibe ich es eben so rein.> PINB = (1<<PB5);
Das finde ich wenig lesbar.
Insbesondere wenn das ein Dutzend solcher Pins, mit verschiedenen
Funktionen, werden.
Ich wünsche mir ein klares Benennungsschema.
Das Arudino Schema ist auch irgendwie klar, zumindest dokumentiert, aber
hilft nicht viel weiter, wenn der (nicht direkt von der Arduino IDE
unterstützte) AVR auf ein eigenes Brett gelötet wird.
So....
Ich fasse mal den Erkenntnis Gewinn zusammen:
Ich muss es mir selber machen!
Ein herzliches Danke, an alle, welche mir eine respektvolle Antwort
gegeben haben.
DANKE!
So, nun an die Arduino Hasser Fraktion:
Ich kann es nur emotional formulieren...
Als ich gerade mal wusste, wie man das Wort "Arduino" schreibt, aber
noch nie einen Atmel bewusst wahrgenommen hatte, sprang mich eine
Aufgabe/Problem/Auftrag an.
Mit Hilfe eines 3 Euronen Boards und der IDE war das Thema in 2H
erledigt.
Das war mein erster Kontakt mit dem Arduino/AVR Kram.
Seit dem bin ich bekennender Fan.
Natürlich sind manche Dinge in der Arduino Welt unglücklich gelöst. Da
gehe ich voll mit den Kritikern konform. Allerdings lässt die IDE einen
auch da ran. Und es gibt auch viel Licht.
Von Hause aus verdaut sie *.S Dateien. (weiß nur kaum einer)
Sie liefert mir automatisch ein Assemblerlisting, so dass ich sehen kann
was der Compiler da baut. Und ja, lieber c-hasser, das kann ich lesen.
Und überhaupt, ich hasse ursprünglich auch C....
Komme eigentlich aus der ObjektPaskal, Java und SPS(AWL) Ecke...
Auch PHP, Forth und SQL wird gerne genommen.
C war mir immer ein Gräul.
C++ ist auch nicht viel schöner...
Aber ich nehme es.
Denn OOP in Assembler ist auch nicht die Ausgeburt an Eleganz.
Schlussendlich ist es völlig scheißegal, welche IDE man verwendet.
Nahezu alle basieren auf der avr-gcc Toolchain.
Es kommt also exakt das gleiche dabei raus, wenn man nur will.
So, nun an c-hater im speziellen:
Deine Herabwürdigungen fasse ich als Angriff und Beleidigung auf.
Fachlich ist da auch nicht wirklich was gekommen, oder?
Wie schätzt du das selber ein?
Hast du meine Frage überhaupt verstanden? ... egal...
Ich nehme mal zu deinen Gunsten an, dass irgendein Ereignis/Umstand in
deiner Kindheit/Jugend zu einer neurotischen Fehlanpassung geführt hat,
so dass du jetzt solche Verhaltensauffälligkeiten zeigen musst.
War das zu kompliziert?
OK, dann auf neudeutsch: Troll!
Und ich finde es schade, dass die Moderation solche Ausfälle recht
selten sanktioniert.
Arduino F. schrieb:> Das Arudino Schema ist auch irgendwie klar, zumindest dokumentiert, aber> hilft nicht viel weiter, wenn der (nicht direkt von der Arduino IDE> unterstützte) AVR auf ein eigenes Brett gelötet wird.
Es hilft genau dann nicht weiter, wenn du für dein Brett nicht die
passende Boardbeschreibung für die Arduino IDE angelegt hast.
Arduino F. schrieb:> Gibt es irgendwo eine Liste dieser Prozessoren?
Soviel ich weiss nein, warum machst du es nicht selbst, ist doch
nicht so schwer ?
Hallo,
für alles halbwegs gängige von den Tiny bis zu den größeren AVR gibt es
das doch schon.
Ich hatte zumindest keinen großen Aufwand, einen Tiny45 aus der IDE zu
bedienen und von dort mit dem Dragon zu flashen.
...
wenn ich das schnell brauche schreibe ich es eben so rein.
PINB = (1<<PB5);
>Das finde ich wenig lesbar.>Insbesondere wenn das ein Dutzend solcher Pins, mit verschiedenen>Funktionen, werden.
Naja, real würde bei mir vermutlich auch
LED_PIN = (1<<LED);
stehen.
Schon deshalb, weil ich dann mit einer #define-Änderung aus PB5 PB3
machen kann oder aus PINB PIND usw.
Arduino bietet eine ganze Menge auch für die eigene Bequemlichkeit.
Beispiel: Stringverarbeitung. Man kann die C-Sachen nehmen oder die
String-Klasse.
Nachteil: auf einem Mega328 wird mit der Stringklasse schnell der Ram
knapp wenn man nicht gut aufpasst.
Auf dem ESP8266 nehme ich die fast ausschließlich, einfacher geht es
nicht.
Aber selbst da habe ich mir da schon Probleme eingebaut. Ein paar
String.replace() mit einem 6k html-Source aus dem Filesystem geladen
laufen auch gegen die Wand. ;-)
Dort entschärft sich auch das digitalWrite() Problem fast von selbst.
80MHz waren bisher da auch flott genug und nette Leute sorgen da fast
immer für Anpassungen.
Die aktuelle NeoPixelBus-Lib hat im Test zumindest keine Probleme mehr
mit 120 WS2812 am ESP und WLAN und MQTT aktiv.
Beim den kleinen AVR werde ich im Notfall wohl auch weiterhin auf C in
der Arduino-IDE oder dem AVR-Studio und ASM zurückgreifen.
Ist ein Hobby und soll es auch bleiben.
Gruß aus Berlin
Michael
Marc V. schrieb:> Soviel ich weiss nein,
Danke für die Auskunft.
Marc V. schrieb:> warum machst du es nicht selbst
Eine herzerfrischende Idee!
Mal abgesehen vom erstellen einer solchen Liste, ist ab dann
Wartungsaufwand nötig. Die Liste will immer auf neuestem Stand gehalten
werden. Kann natürlich sein, dass Atmel nach der Übernahmen nix neues
mehr entwickelt. Naja, da will ich mich nicht drauf verlassen.
Oldschool-Excellianer schrieb:> Geheimtipp: neue Excels können auch ältere Formate.
Geheimtipp:
Wir schreiben Jahr 2016, 1997 war vor 19 Jahren.
Und noch einer:
Auch Excel '97 kann .csv lesen.
>> #ifndef FAST_TOGGLE_PIN_OPTION>> PORTB ^= _BV(5);>> #endif>Das braucht 4 Takte, oder so.>>PINB = _BV(5);>Kommt mit 2 Takten hin
Deshalb programmiere ich nur in ASM, auch wenn ihr das ja alle so
schrecklich findet. Da kann man nunmal ohne viel black magic einfach
direkt zählen, wie viel Takte man braucht.
Und nein, ich habe nichts gegen C, nur sehe ich bei einfachen
µC-Aufgaben dort keinen Vorteil.
So, hate on, wa?
P. M. schrieb:> Die xmegas gehören aber nicht dazu. Die können das. Heißt nur anders:>> PORTn.OUTTGL = <bitmask>
Ja, das ist aber nicht dasselbe wie OUT PINx.
Doch, das ist funktional genau das selbe.
(Abgesehen davon, dass man nicht mit sbi darauf zugreifen kann, da Atmel
entschieden hat, dieses Register nicht mit in die VPORT Register zu
spiegeln.)
Marc V. schrieb:> Arduino F. schrieb:>> Aus den XML generiert?> Ja.>>> Was war das Kriterium?>> <TOGGLE_PIN>
Heijeijei....
Das bekomme ich auch noch hin...
(dachte ich)
Wenn das Wörtchen "Wenn" nicht wäre...
In meinen xml Dateien findet sich leider kein "TOGGLE_PIN".
Nirgendwo....
Meine XML Dateien stammen aus dem Atmelstudio 6.2
Beim 7.0er scheinen die nicht mehr dabei zu sein.
Und eine andere XML Quelle kann ich nicht finden.
Auch nicht auf der Atmel Seite.
Würdest du mir noch verraten, wo du deine XML Dateien her hast?
Arduino F. schrieb:> Würdest du mir noch verraten, wo du deine XML Dateien her hast?
"C:\Program Files\Atmel\AVR Tools\Partdescriptionfiles"
Die gibt es aber auch schon bei Studio 4.19 oder früher.
Command Prompt, geh zu "drive:\Program Files\Atmel", und folgendes:
1
"dir *.xml /s > AvrList.txt"
Sollte dir alle *.xml files in AvrList.txt auslisten (mit Directory).
Und die Files danach parsen, natürlich.
Ein Verzeichnis namens Partdescriptionfiles gibt es nicht auf meinen
Rechnern.
1. Auf meinem ausrangierten XP mit AS6.2 gibt es sowas nicht.
Da findet sich die Datei ATmega328P.xml genau 1 mal auf der ganzen
Platte
Im Verzeichnis: C:\Programme\Atmel\Atmel Studio 6.2\devices
Die habe ich mal als Anhang drangeklebt.
Keine der dortigen, fast 500 Dateien, beinhaltet den String
"TOGGLE_PIN".
Keine *.xml Datei auf dem Rechner beinhaltet "TOGGLE_PIN".
2. Schlimmer noch, auf dem frischen Win10 mit AS7.0
Weit und breit keine ATmega328P.xml
Keine *.xml Datei auf dem Rechner beinhaltet "TOGGLE_PIN".
Arduino F. schrieb:> Nachtrag:> Im AS 7.0 heißen die Dateien jetzt *.atdf, also z.B. ATmega328P.atdf> Aber auch darin kein "TOGGLE_PIN", oder vergleichbar, zu erkennen
Ich kann bestätigen, daß auch bei mir das Verzeichnis
"Atmel\AVR Tools\Partdescriptionfiles" existiert und darin die
*.xml-Files sind, z.B. ATmega88.xml. Und in den XML-Files sind unter
"AVRSimIOPort.SimIOPort" die einzelnen Ports(A, B, C...) aufgeführt und
dort dann "TOGGLE_PIN" mit dem Wert "Y"...
Keine Ahnung, warum das ganze bei dir nicht auffindbar ist.
Ja!
Meine sehen anders aus.
Der "TOGGLE_PIN" Eintrag ist offensichtlich für den Simulator.
Bei den neueren AS wird diese Information dann wohl in der jeweiligen
*.dll Datei stecken. Da gibts für jeden µC eine eigene DLL.
Gut, damit habe ich die Daten bis 2011, wie mir scheint.
Für die neueren fehlt es...
Naja, immerhin!
Ein großer Schritt.
Danke.
Hugo schrieb:> Keine Ahnung, warum das ganze bei dir nicht auffindbar ist.
Habe gerade AS 4.19 installiert.
Da gibts das alles.
Zu 6.XX und 7.0 hat sich da offensichtlich viel geändert.
Hugo schrieb:> Ich kann bestätigen, daß auch bei mir das Verzeichnis> "Atmel\AVR Tools\Partdescriptionfiles" existiert und darin die> *.xml-Files sind,
Eine AS 4er Version...?!?
Arduino F. schrieb:> Eine AS 4er Version...?!?
Ja, ich hab die 4er Version vom AVR-Studio auch noch draufgelassen,
obwohl ich das 6.2er AtmelStudio installiert habe.
Aber die *.xml-Files sind im 4er, richtig.
Was mich auch nachdenklich gemacht hat, daß die Tags TOGGLE_PIN
innerhalb der Simulator-Tags der einzelnen Ports sind....
Arduino F. schrieb:> Gut, damit habe ich die Daten bis 2011, wie mir scheint.> Für die neueren fehlt es...
Die neueren werden es wahrscheinlich alle haben.
Und wie lange es noch 8-bit AVRs geben wird - zumindest zu
vernünftigen Preisen...
Über dieses Thema bin ich gestern auch gestolpert: Wollte 3 Taster zum
Togglen bringen. Beim Layoutentwurf bemerkt: Kein Platz für die IC´s und
die nötige Entprellung. Aber da sind ja noch ein paar alte Attiny11 in
der Bastelkiste. Nach Aufruf des Datenblattes musste ich feststellen:
Der kann ja gar nix, auch nicht Togglen über PinB. Egal, geht ja auch
anders.
Aber vielen Dank für die Liste, kommt bei mir mit in die Atmel-Doku!
ASM Superprofi schrieb:> Deshalb programmiere ich nur in ASM, auch wenn ihr das ja alle so> schrecklich findet. Da kann man nunmal ohne viel black magic einfach> direkt zählen, wie viel Takte man braucht.
Eben, was für eine Aufregung.
Mich interessiert i.a. überhaupt nicht mehr, wieviele Takte irgendwas
nun wirklich baucht, solange es ausreichend schnell ist.
Früher hatte ich den Ehrgeiz, möglichst "effiziente" Programme zu
schreiben. Das hiess: möglichst kompakt, möglichst schnell. Ja, das hat
auch Spass gemacht, war aber letztlich fast immer wertlos, nur fürs Ego
gut. Stunden und Tage zugebracht, um noch ein bisschen rauszukitzeln...
Der gesparte Speicherplatz blieb dann leer, die gesparte Laufzeit wurde
in Warteschelifen verbraten, weil einfach nichts zu tun war. Immer in
der Erwartung: ich hätte noch Reserven für irgendwas, was aber nur
höchst selten kam.
Insofern: nicht aus dem Auge verlieren, wenn es mal knapp wird. Aber als
Grundeinstellung unproduktiv.
Wenn man Anwendungen schreibt, bei denen es auf Mikroampere an
Stromverbrauch ankommt, lernt man auch wieder effizient zu
programmieren, weil der Controller in er Zeit, wo nichts zu tun ist,
einfach mal schlafen kann.
H.Joachim S. schrieb:> ... Aber als Grundeinstellung unproduktiv.
Um Bliss zu zitieren:
The pursuit of excellence is gratifying and healthy. The pursuit of
perfection is frustrating, neurotic and a terrible waste of time.
Heiner schrieb im Beitrag #4679630:
> Es gibt keine AVR, die PINs toggeln koennen :) Dazu brauchst du ein ARM.
Quatsch, ein Beispiel wurde schon zu beginn des Threads genannt:
ATTiny2313 kann sehr wohl Pins toggeln.
Arduino F. schrieb:> Heiner schrieb im Beitrag #4679630:>> Dazu brauchst du ein ARM.>> ARM ist was für richtige Männer....plot twist -> Sophie Wilson... ;)