Hallo zusammen, ich möchte eine kleine Steuerung implementieren und habe mir dafür einen ATTiny 13a ausgesucht. Den Chip und einen usbasb-clone Programmieradapter (https://www.ebay.de/itm/235678726686?var=535986828201) habe ich hier , aber ich scheitere an der Software zum Brennen. Die meisten Tutorials beziehen sich auf den Arduino, habe ich aber nicht. Was ich habe ist die Arduino IDE mit den ATTinyCore Boiards. Da ist der 13a aber leider unbekannt. Dann habe ich noch VisualStudio Code, weiß aber nicht, welche Extra-Pakete ich da bräuchte. Könnte man man damit auch brennen? Dann habe ich auch noch unter Windows das Microchip AVR-Studio installiert. Das erkennt allerdings keinen Chip. Dann gibt's ja auch noch die Komandozeilenprogramme unter Linux, aber alles in Allem überfordet mich das ein bisschen. So viele Dokumentationen und so wenig Ahnung :-( Eigentlich wollte ich ja nur schnell 50 Zeilen Code da reinbringen. Kann mir jemand ein funktionierendes Setting empfehlen, das auch ein alter Mann noch versteht? Vielen Dank schon mal Nachtrag: avrdude -p t13 -c usbasp findet leider kein Target. "avrdude: error: program enable: target doesn't answer. 1 avrdude: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check." Die Verkabelung ist ja eigentlich ziemlich eindeutig. Kann man da irgendwie mehr testen? Ein Oszillograph ist verfügbar.
:
Bearbeitet durch User
Hallo, Paul S. schrieb: > Die Verkabelung ist ja eigentlich ziemlich eindeutig Naja, man muss sich schon etwas Mühe geben, um anhand des Fotos zu beurteilen, mit welcher Wahrscheinlichkeit die Verdrahtung korrekt ist. Ich sehe auf dem Foto auch keinen Abblockkondensator (100 nF Keramik) an der Versorgungsspannung des Mikrocontrollers. Paul S. schrieb: > avrdude -p t13 -c usbasp Ich vermute, es wäre besser, noch den verwendeten seriellen Port anzugeben.
Die Verkabelung habe ich noch win weiteres mal nach dieser Vorlage kontrolliert https://www.blikk.it/forum/blog.php?bn=neuemedien_fb&id=1646239783 Ich gehe davon aus, dass MISO mit MISO verbunden wird und MOSI mit MOSI !? Kondensator ist jetzt gesteckt (direkt am IC zwischen Plus und Masse). Der Adapter hängt an USB und hat keine Adresse (wie z.B. /dev/USBSer1). Allerdings blinkt eine LED auf dem Adapter. Wenn ich den abstecke kommt das Programm mit einem "could not find USB device" zurück. Bis zum Adapter läuft wohl alles gut.
Für mich sieht JP1 aus als wurde er auswählen ob der usbasp 3.3 oder 5V ausgeben soll. Kriegt der tiny (so ganz ohne jumper) überhaupt strom?
Das Problem hatte ich auch mal.Probiere mal den Befehl -B 100 dazuzuschreiben.
Paul S. schrieb: > Ich gehe davon aus, dass MISO mit MISO verbunden wird und MOSI mit MOSI > !? Ja, so sollte es sein. Paul S. schrieb: > Der Adapter hängt an USB und hat keine Adresse (wie z.B. /dev/USBSer1). OK, das wird wohl so stimmen (ich kannte diesen USBasp noch nicht und hatte irrtümlich vermutet, dass er via serieller Schnittstelle a.k.a. COM-Port angesprochen wird). Max D. schrieb: > Für mich sieht JP1 aus als wurde er auswählen ob der usbasp 3.3 oder 5V > ausgeben soll. Kriegt der tiny (so ganz ohne jumper) überhaupt strom? Guter Punkt. Also bitte mal die Versorgungsspannung des ATtinys nachmessen und ggf. eine 3-polige Pfostenleiste in JP1 einlöten und passend mit Jumper versehen.
Wenn der Programmer arbeitet stehen da ganz kurz mal um die 3V an. Wenn ich einen Jumper setze hat der Chip die ganze Zeit Strom. Gut zu wissen. Leider wird der Chip aber so wie so nicht gefunden; Auch ein -B 100 hat nichts geholfen. Ich habe leider keinen zweiten Chip zum Testen. Vielleicht ist der ja einfach kaputt?
:
Bearbeitet durch User
Nun läuft's. Ich verstehe nicht ganz, warum. Nach einigen weiteren Versuchen und Messungen geht es nun (vielleicht irgendwo ein Wackelkontakt?). Auch ganz ohne Jumper wird jetzt ein Device erkannt, allerdings mit einer ungültigen Signatur (0x000000) Auf 3V oder 5V gejumpert funktioniert es aber nun. Der Parameter -B 100 ist aber tatsächlich nötig. Jetzt wäre meine nächste Frage: Mit welcher IDE schreibe ich am Besten das Programm?
Super das es Funktioniert.Nur nicht aufgeben.IDE ist Geschmackssache die von Arduino, Visual Studio usw. Ich verwende Visualmicro unter Visual Studio 2022 Community Edition. PS: mit den 100 von -B kannst ruhig runtergehen, mußt probieren bis zu welchem wert es noch funktioniert. Weil wenn zu hoch dauert es bei größeren Codes ewig bis er das auf dem Mikrocontroller drauf geladen hat.
Der Attiny13 ist zu klein für das Arduino Framework, den kann man nur "Bare Metal" programmieren. Ein Attiny85 würde gehen.
Hallo, wenn der Anfang leicht sein soll, dann Arduino IDE + https://github.com/MCUdude/MicroCore. Ansonsten wird das drum herum bis man loslegen kann etwas umständlicher. Wenn du wenig programmierst, denke ich die Arduino IDE reicht dir vollkommen aus.
Christoph M. schrieb: > Der Attiny13 ist zu klein für das Arduino Framework, den kann man nur > "Bare Metal" programmieren. Ein Attiny85 würde gehen. Es gibt sogar für den Tiny4/5 das Framework. "Luxusfunktionen" wie millis() hat man damit nicht mehr, aber man kann die mit Arduino programmieren. Meist muss man dann aber doch "auf Fußpilzebene" in den Registern für Timer etc. arbeiten, aber das ist vollkommen okay. Wichtig ist immer ein niedriger Takt beim ersten Programmieren.Das CKDIV-Fusebit ist gesetzt, damit darf der ISP-Takt max. 125kHz betragen (ein Achtel von einem Achtel von 8MHz)
Christoph M. schrieb: >> Der Attiny13 ist zu klein für das >> Arduino Framework. Veit D. (devil-elec) 01.10.2024 06:29 >Nein. Das sieht aber definitiv nicht nach Arduino-Framework aus, sondern nach "Bare Metall": https://github.com/MCUdude/MicroCore/blob/master/avr/libraries/AVR_examples/examples/Blink/Blink.ino
Paul S. schrieb: > Der Parameter -B 100 ist aber tatsächlich nötig. -B 20 hätte wohl auch gereicht. Dieser Parameter reduziert den Takt, mit dem der ATtiny programmiert wird. Da der Tiny wohl fabrikneu ist (noch ungefused) steht der per default bei 1,2 MHz internem Takt ("int. RC OSC 9.6 MHz" und "Divide clock by 8 internally) Siehe auch: https://www.engbedded.com/fusecalc/ avrdude -c usbasp -p t13 -B 20 -U lfuse:w:0x7A:m -U hfuse:w:0xff:m fused den Tiny und deaktiviert die interne Taktteilung, so daß der Chip fortan mit 9,6 MHZ läuft. Danach ist -B 20 nicht mehr notwendig. Paul S. schrieb: > Jetzt wäre meine nächste Frage: Mit welcher IDE schreibe ich am Besten > das Programm? Wieso muß es eine IDE sein und nicht ganz klassisch mittels einem Makefile (gerade bei einem ATtiny13)? Im Anhang habe ich dir ein Demo-Blinkprogramm zusammen gestellt, mittels dem du einfach auf der Konsole ein make aufrufst und das Blinkprogramm wird kompiliert. Dann brauchst du nur noch einen Texteditor deiner Wahl und du kannst loslegen. Für meine Zwecke programmiere ich mit dem Programm Geany (weil schlank und schnell) und meinem eigenen Konsoleneditor. Entpacke den Anhang in ein Verzeichnis deiner Wahl und wechsle in der Konsole in dieses Verzeichnis. Mache das Programm cide mittels chmod +x cide lauffähig und starte dieses mit: ./cide Hier kannst du bspw. das Blink-Programm laden und entweder mit den Menüflachen oder mit F9 kompileren und mit F8 flashen. Möchtest du mit Geany programmieren, empfiehlt es sich Geany für den Erstellenvorgang (build) zu konfigueren. Hierfür gehst du auf den Menüpunkt: - Erstellen | Kommandos zum Erstellen konfigurieren Dort nimmst du die Einstellungen wie im Bildschirmfoto vor und du kannst auch von hier aus loslegen ---------------------------------- Zum Makefile im Archiv: Das Makefile ist so gehalten, dass im Kopf alle Angaben gemacht werden können, die zum Kompilieren und Flashen notwendig sind. Der Kommentar im Makefile beschreibt die Benutzung. Hier machst du nur noch Angaben zum verwendeten - AVR-Controller (in deinem Falle ATtiny13) - der Frequenz mit der er betrieben wird - evtl. Bibliotheken die du einbinden möchtest (in deinem Fall erst einmal keine) - den zu verwendenden Programmer Alle anderen Angaben nach
1 | ############################################################################### |
2 | # |
3 | # funktionaler Teil des Makefiles, Aenderungen nur mit Bedacht vornehmen |
4 | # |
5 | ############################################################################### |
solltest du so lassen wie es ist. Hiermit bist du dann in der Lage, dein Programm mittels CIDE, GEANY oder per Texteingabe auf der Konsole zu generieren. Eingabe auf der Konsole: [code] make erstellt eine Binärdateu make all dto. make size zeigt den Flashspeicherbedarf des Programms an make clean löscht alle erzeugten Kompilate (nicht das Quellprogramm) make fuses fused den ATtiny13 für einen 9,6 MHz Takt intern [/code Hinweis: Die verwendete Includedatei avr_gpio.h macht den Umgang mit den Anschlusspins leichter. Eine "Bitverschiebeakrobatik" im Main-Programm ist hier dann nicht mehr notwendig und macht ein Programm lesbarer.
Christoph M. schrieb: > Das sieht aber definitiv nicht nach Arduino-Framework aus, sondern nach > "Bare Metall" Eben. Dazu sagt die Doku von ATTinyCore: "ATtiny13/13A are supported by MicroCore by @MCUdude - 2k of flash is the lower cutoff for ATTinyCore." https://github.com/SpenceKonde/ATTinyCore Link zum Microcore https://github.com/MCUdude/MicroCore Ich würde allerdings auch lieber auf den ATtiny45 oder 85 wechseln, denn dann kann man den "normalen" und viel weiter verbreiteten ATTinyCore verwenden. Man muss sich ja nicht unnötig Probleme schaffen. Für die Bare-Metal Programmierung des ATtiny13 hatte ich mal ein Buch geschrieben: http://stefanfrings.de/mikrocontroller_buch/index.html
... ach herjeh, vor lauter Bilder hochladen habe ich das Wichtigste vergessen: das Archiv. Wird hiermit nachgereicht !
Hallo, Leute, jetzt seid nicht so klein kariert. Das Arduino Framework wird auch vom MCUdude MicroCore für den ATtiny13 verwendet. Bspw. für Serial. Die wenigen Pins sollte man natürlich Bare Metall abfrühstücken. Dafür dient sein Bsp. wie man das macht.
Martin schrieb: > IDE ist Geschmackssache die von Arduino, Visual Studio usw. Ich verwende Visualmicro unter Visual OK, werde ich mal testen. > PS: mit den 100 von -B kannst ruhig runtergehen, mußt probieren bis zu > welchem wert es noch funktioniert. Weil wenn zu hoch dauert es bei > größeren Codes ewig bis er das auf dem Mikrocontroller drauf geladen > hat. Ja, das habe ich schon bemerkt. Aber mein Programm wird wahrscheinlich wirklich nicht viel mehr als 50 Zeilen haben.
Veit D. schrieb: > Hallo, > > wenn der Anfang leicht sein soll, dann Arduino IDE + > https://github.com/MCUdude/MicroCore. Cool, das habe ich vermisst. Ich hatte ein anderes ATTiny Paket installiert, aber da war der 13a nicht dabei. Vielen Dank. Ist jetzt installiert, funktioniert aber nur teilweise. Wenn ich ein kleines Testscript schreibe wird das anstandslos übersetzt, aber danach kommst die Meldung: "Requested 'upload' (sic!) fehlt", ohne weitere Infos. Kann ich die erzeugte Datei auch mit avrdude flashen? Und wenn ja, welche wäre das dann?
Paul S. schrieb: > Kann ich die erzeugte Datei auch mit avrdude flashen? Die Arduino IDE benutzt bereits avrdude.
Hallo, alle kompilierten Dateien landen in einem Temp Ordner unter Windows. Das sollte unter Linux genauso sein. Der Pfad steht im Ausgabefenster ganz unten und nach rechts scrollen. In den IDE Einstellungen alle Ausgaben einschalten. Hast du zum flashen in der IDE den Programmer ausgewählt? Weil Standardmäßig flasht die IDE über USB zum Bootloader. Fehlermeldungen bitte als Text und komplette Ausgabe kopieren und zur Verfügung stellen. Dann schauen wir mal wer wie weiterhelfen kann. Noch ein Schuss ins Blaue. Die User Rechte für die USB Schnittstelle hast du? Oder erscheint dafür keine Linux Fehlermeldung?
:
Bearbeitet durch User
Oh, wo muss/kann ich das einstellen? Wenn ich einfach "upload" sage bekomme ich einen Fehler "Requestet upload failed". Ich finde nichts. Manuall flashen mit avrdude hat funktioniert (die .hex-Datei im Temp-Ordner), ist aber natürlich mühsam.
:
Bearbeitet durch User
Stelle im Menü deinen ISP Programmer ein und flashe damit den bootloader neu. Auch dafür gibt es einen Menüpunkt.
Sorry, das war falscher Alarm. Flashen direkt aus der Arduino-IDE funktioniert jetzt auch. Ich hatte die Einstellungen an der falschen Stelle gesucht. Welche Möglichkeiten gibt es eigentlich zum Debugging?
Paul S. schrieb: > Welche Möglichkeiten gibt es eigentlich zum Debugging? Keine, es sei denn du meinst blinkende LEDs und serielle Ausgaben.
:
Bearbeitet durch User
Paul S. schrieb: > Welche Möglichkeiten gibt es eigentlich zum Debugging? Umsteigen. https://www.microchip.com/en-us/development-tool/EV50J96A https://www.microchip.com/en-us/development-tool/DM080104
Hallo, gut das erstmal alles funktioniert. Debugging ist so eine Sache. Dafür benötigt es einen teureren Programmer bspw. Atmel ICE. Und dann wäre noch eine andere IDE von Nöten um Breakpoints zu setzen. Aber, wenn man Minimalismus gewohnt ist, kommt man mit gut platzierten seriellen Ausgaben und ggf. einen Logic Analyzer schon sehr weit. Hat auch den Vorteil, dass das Programm nicht am Breakpoint angehalten wird. Man schaut sozusagen live zu. Ob du mit dem ATtiny13A noch Platz für den Code von "Serial" hast, musste schauen. Ansonsten freie Pins schalten und mit Analyzer schauen, wo wann welche Codezeile ausgeführt wird oder auch nicht. Oder wie Georg eingeworfen hat, die AVR Serie wechseln. Ist ein kleiner Umstieg, aber UPDI ist die neue Schnittstelle bei AVR. Die verlinkten Boards von Georg kann man als Programmer/Debugger verwenden. Hatte ich gar nicht mehr auf dem Schirm. ;-) Da ist alles dran und drauf was man benötigt. Damit kennt sich Georg aus. Eine andere IDE wie die Arduino IDE benötigt man dennoch?
:
Bearbeitet durch User
OK, auf das Debugging verzichte ich wohl erstmal :-) Technisch scheint dann alles soweit geklärt. Woran ich jetzt knabbere: Wie sind eigentlich die Pinbezeichnungen? wenn ich Pin2 auf High schalten will muss ich digitalWrite(3, HIGH) schreiben. Pin3 ist dann 4 In den Scripten, die ich so sehe sehe ich aber immer DDRB |= (1<<PB0); //Datenausgangsregister setzen PORTB |= _BV(PB1); //internen Pull-Up-Widerstand an PB1 einschalten PCMSK |= (1<<PINB1); //PCMSK – Pin Change Mask Register GIMSK |= (1<<INT0); //External Interrupt Request 0 Enable MCUCR |=(0<<ISC01) | (0<<ISC00); Gibt es irgendwo eine Liste der diversen Bezeichnungen? Nachtrag: Hab's gerade gefunden! Ansonsten möchte ich mich hier schon mal für die rege und konstruktive Hilfe bedanken. Schön, dass doch noch nicht alle nur noch vor TikTok sitzen :-)
:
Bearbeitet durch User
Paul S. schrieb: > In den Scripten, die ich so sehe sehe ich aber immer > > DDRB |= (1<<PB0); //Datenausgangsregister setzen > PORTB |= _BV(PB1); //internen Pull-Up-Widerstand an PB1 einschalten > PCMSK |= (1<<PINB1); //PCMSK – Pin Change Mask Register > GIMSK |= (1<<INT0); //External Interrupt Request 0 Enable > MCUCR |=(0<<ISC01) | (0<<ISC00); Das hier ist "Bare Metall" und sicherlich kein Beispiel für Arduino gewesen. Paul S. schrieb: > wenn ich Pin2 auf High schalten will muss ich > digitalWrite(3, HIGH) > schreiben. > Pin3 ist dann 4 Du meinst hier wohl den Pin2 des Chips?!? PB0 oder auch PB1 ist die Funktion des Anschlusspins des Chips und hat mit der Pinnummerierung des Bausteins nichts zu tun! Pinbelegung des Chips siehe Bild im Anhang. Arduino macht seine eigene Zuordnung zu den Pins, wodurch es in Arduino möglich ist, Boards mit unterschiedlichen Controllern immer gleich anzusprechen (ob einem das gefällt sei dahin gestellt). Im Falle des ATtiny13 ist die Zuordnung:
1 | Chip-Pinnummer Bezeichnung Arduino-Boardnummer |
2 | -------------------------------------------------- |
3 | 1 PB5 * 5 auch A0 |
4 | 2 PB3 3 auch A3 |
5 | 3 PB4 4 auch A2 |
6 | 4 GND |
7 | |
8 | 5 PB0 0 |
9 | 6 PB1 1 |
10 | 7 PB2 2 auch A1 |
11 | 8 Vcc |
12 | |
13 | * Anschluss sollte nicht verwendet werden, da dieser auch der Resetpin ist. Wird ein ATtiny13 so geflasht, dass dieser Pin als GPIO verwendet wird, ist nach dem Flashen der Chip nicht mehr mittels ISP (bspw. über UŚBasp) flashbar |
Veit D. schrieb: > Eine andere IDE wie die Arduino IDE benötigt man dennoch? Eine IDE benötigt man so oder so.
Georg M. schrieb: > Eine IDE benötigt man so oder so. Ich lerne hier jeden Tag neue Dinge. Aus gewöhnlich gut unterrichteten Kreisen sickerte neulich noch folgende Information durch: Es gab tatsächlich ein Leben vor IDEs.
Es scheint ja jetzt bei dir alles zu funktionieren. Hier noch mal der Vollständigkeit halber der Hinweis: Wenn (unter Linux) das Paket brltty installiert ist (für die Braille Zeile, oft vorinstalliert) kann / wird es mit dem flashen über USB kollidieren. Man sollte das Paket deinstallieren vorausgesetzt, man benötigt keine Braille Zeile. (siehe z.B. hier https://github.com/arduino/help-center-content/issues/155)
Gerhard Z. schrieb: > Es scheint ja jetzt bei dir alles zu funktionieren. Hier noch mal der > Vollständigkeit halber der Hinweis: Wenn (unter Linux) das Paket brltty > installiert ist (für die Braille Zeile, oft vorinstalliert) kann / wird > es mit dem flashen über USB kollidieren. Das KANN eine Rolle spielen, wenn man den Chip mittels eines seriellen Bootloaders (eine USB2UART-Brücke ist eine virtuelle serielle Schnittstelle) flasht, wie bspw. unmengen preiswerter Arduino UNO r3 Boards. Da der TO seinen Chip über einen USBasp flasht (weil im Tiny13 aufgrund des mickrigen Flashspeichers schlicht kein Platz ist) und nicht über eine wie geartete serielle Schnittstelle, brltty ohne Belang.
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.