Forum: Projekte & Code Arduino - UNO Flashershield (Linux)


von Ralph S. (jjflash)



Lesenswert?

Im Rahmen eines "kleinen" Wettbewerbs entstand das Flashershield für 
Arduino-UNO im r3 Format.

Bedingungen waren:

- diskrete Bauteile (OP's allerdings erlaubt)
- single Layer Platine oder Lochrasterkarte
- muß auf einen Arduino UNO aufsteckbar sein

--------------------------------------------------------------------

Das Flashershield kann folgende MCU flashen:

- AVR mittels STK500v2 Protokoll
- MCS-51 (89S51/52; 89S8253; 89S2051 / 4051) proprietäres Protokoll
- PIC16F mittels ardpicprog Protokoll

Wie das immer so ist: zuerest dachte ich dass das kleine Projekt kein so 
großer Aufwand aber die Softwareseite war dann eben doch aufwändiger.

Zudem bin ich ein Retro-Mensch (zu deutsch alter Sack) und dachte mir 
ich mache die Bediensoftware eben Retro (und wie ich das sehr sehr mag) 
für die Konsole. Deshalb wurde das Ganze mit dem TurboVison / FreeVison 
Framework programmiert. Ich mußte jedoch feststellen, dass das ganze mit 
Lazarus oder QT5 / C++ deutlich schneller fertig gewesen wäre (aber dann 
eben nicht für die Konsole geeignet wäre).

Installation der Software für das Flashershield
-----------------------------------------------------

ZIP-Archiv herunterladen,  in beliebiges Verzeichnis entpacken und dort:

./install

eingeben. Mit Tasten (j/n) kann im Installationsscript selektiv 
ausgewählt werden, ob Firmwares, Flasherprogramme und ein FreeVison 
Editor ins Verzeichnis /usr/local/bin kopiert werden sollen

Nach der Installation ist "flashershield" Systemweit verfügbar und wird 
mittels:

flashershield

gestartet.

AVR
----
Als Flasherprogramm für AVR dient AVRDUDE. Hinweis: bei Arduino-UNO 
Klone aus China funktioniert AVRDUDE aufgrund des CH340G Chips der Klone 
bis Version 5.8 und ab Version 6.3

Das Ausgangsprojekt der Firmware für Benutzung mit AVR MCUs stammt aus:

http://tuxgraphics.org/electronics/200510/article05101.shtml

MCS-51
------
Das Flasherprogramm für MCS-51 ist flash51ide

PIC16F
------
Das Ausgangsprojekt für PIC16F MCU stammt aus:
http://rweather.github.io/ardpicprog/index.html

---------------------------------------------------
Die Firmwares von AVR500 und PIC16F wurden modifiziert und dem 
Flashershield angepasst.

Mittels des Buttons kann der USB2UART Chip des UNOs auf die 
Anschlussleisten umgeleitet werden und somit kann eine MCU mittels UART 
mit dem PC kommunizieren. Die rote LED zeigt an, ob diese "Brücke" 
aktiviert ist oder nicht.

Die Bedienersoftware "flashershield" beinhaltet eingebettet 3 
unterschiedliche Firmwares. Soll das Flashershield bspw. als PIC16f 
Programmer dienen, muß zuerst mittels "flashershield" die Firmware in 
den Arduino geladen werden. Soll dieses geschehen, muß der Jumper auf 
JP3 entfernt werden und nach dem Installieren der Firmware wieder 
gesteckt werden. JP3 verhindert, dass der Arduino beim Starten einer 
UART-Verbindung zuerst in seinen Bootloader springt.

Außerdem beinhaltet "flashershield" die Möglichkeit, menügesteuert 
Hex-Files in den MCU zu laden ohne langee Kommandozeileneingaben zu 
tätigen. Im Falle von AVR können über "Flashershield" auch die Fuses 
gesetzt werden.

----------------------------------------------------
Das Flashershield eignet sich somit als Programmer für Aufbauten auf
einem Steckbrett, vor allen Dingen dann, wenn Controller nicht mittels 
der ARDUINO IDE programmiert werden sollen.

Als STK500v2 Programmer ist er zudem deutlich schneller als ein USBasp:

STK500V2
--------
1
avrdude -c stk500v2 -p atmega168 -P /dev/ttyUSB0 -b 115200 -B1 -V -U flash:w:tetris6_devboard.hex
2
3
avrdude: AVR device initialized and ready to accept instructions
4
5
Reading | ################################################## | 100% 0.07s
6
7
avrdude: Device signature = 0x1e9406 (probably m168)
8
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
9
         To disable this feature, specify the -D option.
10
avrdude: erasing chip
11
avrdude: reading input file "tetris6_devboard.hex"
12
avrdude: input file tetris6_devboard.hex auto detected as Intel Hex
13
avrdude: writing flash (6492 bytes):
14
15
Writing | ################################################## | 100% 1.54s
16
17
avrdude: 6492 bytes of flash written
18
19
avrdude: safemode: Fuses OK (E:F9, H:D5, L:CF)
20
21
avrdude done.  Thank you.

USBasp
------
1
avrdude -c stk500v2 -p atmega168 -P /dev/ttyUSB0 -b 115200 -B1 -V -U flash:w:tetris6_devboard.hex
2
3
avrdude: AVR device initialized and ready to accept instructions
4
5
Reading | ################################################## | 100% 0.07s
6
7
avrdude: Device signature = 0x1e9406 (probably m168)
8
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
9
         To disable this feature, specify the -D option.
10
avrdude: erasing chip
11
avrdude: reading input file "tetris6_devboard.hex"
12
avrdude: input file tetris6_devboard.hex auto detected as Intel Hex
13
avrdude: writing flash (6492 bytes):
14
15
Writing | ################################################## | 100% 1.54s
16
17
avrdude: 6492 bytes of flash written
18
19
avrdude: safemode: Fuses OK (E:F9, H:D5, L:CF)
20
21
avrdude done.  Thank you.


Im Falle von MCS-51 ist es sogar eine der wenigen Möglichkeiten, einen 
der (veralteten ?!?) AT89S52 zu flashen (die ich aufgrund ihrer 
Robustheit und Anzahl von I/O Ports immer noch dann schätze, wenn 
Geschwindigkeit und Stromverbrauch keine Rolle spielen).

Wird die PIC16F Firmware gestartet, kann mit Hilfe eines Terminals 
(bspw. PuttY oder picocom) in die Firmware "hineingesehen" werden. Die 
Firmware liefert KEIN ECHO, sodaß eine Einschalten der Echofunktion im 
Terminal hilfreich ist.

Wird im Terminal "devices" eingegeben, listet der Arduino alle 
unterstüzten PIC16F MCU's auf.

Statusanzeigen der LEDs:

gelbe LED: Funktionsbereitschaft des Programmers
grüne LED blinkt oder dauernd an: Ein Chip wird gerade programmiert
rote LED: das Flashershield fungiert als USB2UART Bridge

-----------------------------------------------------
Bilderbeschreibung:

flashershield_02.jpg zeigt das Shield in Verbindung mit einem PIC16F676

flashershield_03.jpg zeigt das Shield in Verbindung mit ATtiny44

flashershield_with_pic16f676.jpg zeigt einen Screenshot, der gerade 
einen PIC16F676 programmiert hat.

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Ich habe leider die ZIP-Datei vergessen anzuhängen ...

von Ralph S. (jjflash)


Lesenswert?

Gerade eben angekommen (und ausprobiert). Die Anschlüße des ISP-Shields 
von EBAY

https://www.ebay.de/itm/AVR-ISP-Shield-Buzzer-IC-Burning-Burn-Bootloader-Programmer-fur-Arduino-UNO-R3/272865720849?hash=item3f88107a11:g:hGAAAOSwjdpbNePK

sind identisch mit meinem Flashershield.

Also IDC Pfostenleiste eingelötet und ausprobiert und siehe da:

Das Teil funktioniert mit meiner Software für AVR und MCS-51.

Für PIC16F logischerweise nicht, da zum einen der ICSP Connector und die 
12V Brennspannung fehlen

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Update:

Es gab einen Fehler im Programm:

Wenn der User keinen Zugriff auf den Ordner /tmp hat (bei mir gibt es 
den Zugriff), hat sich das Programm verabschiedet.

Jetzt wird ein Ordner im home-Verzeichnis des Benutzers angelegt.

Benutzer: mcu

Angelegter Ordner: /home/mcu/tmp

von Johann D. (khs)


Lesenswert?

Servus Ralph,
habe versucht, Deine Software hier einzusetzen.
Habe hier mit Mint Cinemon 19.3 und 21 probiert.
Das installieren klappte soweit, doch beim Versuch
eine Firmware zu flashen wurde einmal eine
libusb.xxx, oder eine libreadline.xxxx nicht gefunden.
Linux ist scheinbar doch nicht gleich Linux,
mit welchem BS hat es bei Dir funktioniert?

Gruß, Hans

: Bearbeitet durch User
von Jack V. (jackv)


Lesenswert?

Johann D. schrieb:
> beim Versuch
> eine Firmware zu flashen wurde einmal eine
> libusb.xxx, oder eine libreadline.xxxx nicht gefunden.

libusb.xxx und libreadline.xxxx gibt es tatsächlich nicht – unter keinem 
Linux.

Bist du sicher, dass es nicht libusb.so* und libreadline.so* waren? In 
dem Fall wäre libusb.so nämlich im Paket libusb-dev, und libreadline.so 
analog in libreadline-dev (vorausgesetzt, Mint hält sich zumindest 
ansatzweise an das unter debianoiden Distributionen übliche Paketschema 
– leider ist die Paketsuche auf deren Seite für mich kaputt, so dass ich 
da nicht fix nachschauen konnte).

: Bearbeitet durch User
von Ralph S. (jjflash)


Lesenswert?

prinzipiell hängt das ja mal grundsätzlich von der USB2UART Bridge ab, 
die auf einem Uno verbaut ist (je nachdem, ob das ein originaler oder 
ein Chinaclone ist). Getestet hab ich das auf einer eigenen 
Livedistribution bassieren auf Porteus Slackware, einer regulären 
Slackware Distribution (reine Konsole) und auf Ubuntu mit Arduino Uno 
mit CH340G Chip und mit FDTI Chip. Welcher Treiber für deinen UNO nicht 
will weiß ich nicht. Du kannst deinen UNO aber schon mittels avrdude 
flashen?

Welche Firmware willst du denn aufspielen?

von Johann D. (khs)


Lesenswert?

Danke für die Antworten.
Muß gleich mal gestehen, daß ich noch gar keinen UNO habe.
Habe vor längerer Zeit mal ein paar Nanos geschenkt bekommen,
vermutlich Chinaklone und nur mit der Einstellung "old Bootloader"
zu flashen.
Da ja die Nanos auch 328er verbaut haben und die Ports beim Uno
und Nano auch fast gleich sind, wollte ich probieren, ob ich
irgendwie die Firmware auf einen Nano bekomme und er dann
zum programmieren der MCS-51 verwendet werden kann.

Also nach dem installieren und starten aus der Konsole, ging ich auf
Firmware und wählte die mittlere aus.
Es kam dann auch unten die Meldung:
creating flashershield.hex auf /home/mcu/tmp
das Verzeichnis wurde zwar angelegt, aber keine Datei darin.

Die weitere Meldung war dann
avrdude........mit den Befehlen
und dann die Fehlermeldung von den nicht gefundenen libs,
einmal libusb-0.1.so-4 (vorhanden war libusb-0.1.4)
ein andermal libreadline.so.6 (vorhanden war libreadline6)

Die Frage wäre hauptsächlich, ob es überhaupt mit einem Nano
gehen könnte und wie ich an die Datei flasherschield.hex komme.
Es wäre auch nur die Verwendung für MCS-51 vorgesehen, auch
bei einem Uno ohne flashershield (nur Jumper für Reset und
4 Programmierleitungen herausgeführt)


Noch ein paar Anmerkungen zu den zip-Dateien:
Habe erst nach ein paar Wochen gemerkt, daß es da eine alte und neue
gibt. Das entpacken war kein Problem, danach war dann immer (unter 
anderen)
ein 32-Bit- und 64-Bit-Verzeichnis da.
Der Installer suchte sich automatisch das richtige Verzeichnis aus.
Bei der alten Ausgabe fehlte jedoch im 64-Bit-Verzeichnis die Datei
"flashershield", die im 32er schon vorhanden war, beim Update war es
genau umgekehrt. Durch kopieren der Datei von einem Verzeichnis
ins andere konnte so die komplette Installation ohne Fehlermeldung
erfolgen. Da vermute ich, dass die Software selbst auf 32 und 64-Bit-
Rechnern gleich sein kann.

Gruß, Hans

von Johann D. (khs)


Lesenswert?

Habe mir den Nano hier noch mal genauer angeschaut und gesehen,
daß so ein CH340G hier auch verbaut ist.
Außer einem AMS1117 (Spannungsregler) finde ich hier keine
zusätzlichen ICs.

Nach genauerem vergleichen der Datenblätter von Uno und Nano,
sehe ich jetzt auch, daß der Uno auch noch einen Atmega16 hat.
Was dieser auf dem Board für Aufgaben hat, wenn keine Ein-/Aus-
gänge davon rausgeführt sind?
Ebenso der oben genannte FDTI Chip, wenn dieser für das Projekt
gebraucht wird, kann es natürlich mit dem Nano nicht funktionieren.

Da wäre dann noch die Sache mit den libs.
Bei Mint Cinemon 19.3 finde ich die libreadline5 und libreadline7,
beim 21er glaub ich war es libreadline6, aber keine mit dem
"so"-Zusatz.
Vielleicht ziehe ich doch wieder mal auf einem PC ein Ubuntu auf,
ob es damit weiter kommt. Würde jetzt an eine 3 bis 4 Jahre
alte Version denken, oder ist das Flashershield auch mit den
aktuellen Versionen am laufen?

Gruß, Hans

von Manfred (Gast)


Lesenswert?

Johann D. schrieb:
> Nach genauerem vergleichen der Datenblätter von Uno und Nano,
> sehe ich jetzt auch,

... dass Du nicht genau geschaut hast.

Uno und Nano haben beide einen ATMega328, Software für den Uno läuft 
klaglos auch auf dem Nano.

Das wesentliche Merkmal der Arduinos ist, diese per USB programmieren zu 
können, dafür brauchen sie einen Baustein, der Rx / Tx auf USB umsetzt.

Beim originalen Nano ist das ein FTDI-Baustein, die ChiNanos setzen 
stattdessen einen CH340 drauf.

Beim Uno macht ein AtMega8 oder -16 die USB-Anbindung, die ChinUnos 
haben stattdessen ebenfalls den CH340.

Das ist vollkommen egal, man muß lediglich am PC den jeweils passenden 
USB-Treiber einrichten. FTDI oder ATMega-USB bringt die Arduino-IDE mit, 
für den CH340 muß man halt manuell Hand anlegen.

Falls es Dir entgangen ist: Der Thread ist von September 2018! Um einen 
AT328 per ISP zu programmieren oder dessen Bootloader auszutauschen, 
gibt es vom Chinesen jede Menge fertiger Platinchen für ein paar Euro zu 
kaufen. Es gibt auch diverse Beispiele, einen Uno ohne externe Hardware 
dafür zu verwenden.

von Ralph S. (jjflash)


Lesenswert?

Manfred schrieb:
> Um einen
> AT328 per ISP zu programmieren oder dessen Bootloader auszutauschen,
> gibt es vom Chinesen jede Menge fertiger Platinchen für ein paar Euro zu
> kaufen.

Wenn ich das richtig verstanden habe (und richtig gelesen habe), dann 
möchte Johann keinen AVR flashen, sondern einen MCS51

Johann D. schrieb:
> Die Frage wäre hauptsächlich, ob es überhaupt mit einem Nano
> gehen könnte und wie ich an die Datei flasherschield.hex komme.
> Es wäre auch nur die Verwendung für MCS-51 vorgesehen, auch
> bei einem Uno ohne flashershield (nur Jumper für Reset und
> 4 Programmierleitungen herausgeführt)

Hier muß man dann sagen, dass das grundsätzlich mit einem Arduino Nano 
geht. Allerdings sollte man eben ein paar wichtige Dinge wissen. Hier in 
Bezug einmal auf den Arduino, zum anderen in Bezug auf das 
Betriebssystem des PC's.

Wie oben gesagt, gibt es beim UNO unterschiedliche Chips (beim 
Originalen), die die Funktion der USB2UART Brücke vornehmen, damit sich 
der Arduino am Computer als serielles Gerät ausgibt (bei Chinamodellen 
ist der Chip sehr häufig ein CH340G).

Je nachdem welcher Chip verbaut ist, wird sich ein Arduino dann im 
Ordner

/dev

als:

/dev/ttyUSB0

oder

/dev/ttyACM0

anmelden (wenn es denn das erste USB2UART Device am PC ist).

mit:

ls /dev/ttyU*

oder

ls /dev/ttyA*

kann man dann sehen, ob der Arduino vom Linuxsystem bereits erkannt ist.

Manfred schrieb:
> Uno und Nano haben beide einen ATMega328, Software für den Uno läuft
> klaglos auch auf dem Nano.

Absolut richtig, aber:

Manfred schrieb:
> Beim Uno macht ein AtMega8 oder -16 die USB-Anbindung, die ChinUnos
> haben stattdessen ebenfalls den CH340.

Beim Uno machen das ATMega8U2 oder -16U2 Controller. Hier steht das U 
dafür, dass diese Controller eben nativ USB 2.0 unterstützen.

Größere Abweichung (aus meiner Sicht der Dinge immer unverständlich 
gewesen) ist, dass der Nano einen anderen Bootloader als der UNO hat. 
Hier sticht vor allem heraus, beim Nano eine Baudrate von 57600 Bd 
verwendet wird, beim UNO 115200 Bd. Hier bin ich persönlich hergegangen 
und habe meine Nanos mit dem Optiboot Bootloader und mit 115200 Bd 
geflasht.

Bei den Nanos aus China ist noch zu sagen, dass es hier auch einige 
gegeben hat (und gibt), die anstelle eines ATMega328 nur einen ATMega168 
haben.

Auf jeden Fall sollte meine Software genügen, über einen Arduino Nano 
einen MCS51 zu flashen.

Grundsätzlich sollte Johann aber erst einmal in der Lage sein, seinen 
Arduino Nano mittels AVRDUDE flashen zu können. Kann er das nicht, ist 
alles vergebene Liebesmühe.

---------------------------------------------

Leider bin ich derzeit im Krankenstand und habe auf meine 
Entwicklungskiste keinen Zugriff. Wenn ich den wieder habe, kann ich 
hier speziell ein Binary des Hostprogramms hochladen, das den Arduino 
Nano bedienen soll. Dieses würde ich dann als Konsolenprogramm hier 
einstellen (ohne die TurboVision Oberfläche des Konsolenprogramms).

Als erstes sollte aber wie gesagt, Johann seinen Nano im Griff haben, um 
ihm mittels AVRDUDE ein Programm aufspielen zu können. Wenn das 
funktioniert, kann ich ihm hier wie gesagt die Firmware einstellen 
(einmal für einen ATMega328 und einmal für einen ATMega168), die dann 
mittels AVRDUDE aufgespielt wird. Wenn diese Software aufgespielt ist, 
wäre es (bspw. auf einem Steckbrett) sinnvoll, die Resetleitung des Nano 
auf +Ub zu setzen, damit beim Zugriff lauf den Nano über die serielle 
Schnittstelle dieser nicht mehr zurückgesetzt wird (und somit in seinem 
Bootloader landet).

Danach sollte es dann kein Problem mehr sein, einen MCS51 zu flashen.

Wie gesagt kann ich das aber erst dann machen, wenn ich wieder zugriff 
auf meinen Entwicklungsrechner habe.

Ein schönes 2. Adventswochenende,

JJFlash

von Johann D. (khs)


Lesenswert?

Danke für die ausführlichen Antworten,
und keine Eile notwendig.
Was mir noch auffiel - Ich hatte eine Arduinoide 1.8 auf einem
Windows- und eine auf einem Linux-PC.
Jetzt auf dem Linux eine IDE 2.
Beim vergleichen fand ich auf der neuen keine Einstellmöglichkeit
für "old Bootloader", dafür einen Pfad "Bootloader installieren"

Andere Frage, könnte man den AVR auf dem Arduino auch über die
6polige Stiftleiste programmieren? (z. B. mit PonyProg o. ä.)

Gruß, Hans

: Bearbeitet durch User
von Klaus S. (kseege)


Lesenswert?

Johann D. schrieb:
> Andere Frage, könnte man den AVR auf dem Arduino auch über die
> 6polige Stiftleiste programmieren? (z. B. mit PonyProg o. ä.)

Die ist genau dafür da.

Gruß Klaus (der soundsovielte)

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Johann D. schrieb:
> Andere Frage, könnte man den AVR auf dem Arduino auch über die
> 6polige Stiftleiste programmieren? (z. B. mit PonyProg o. ä.)

Ach .. Herr .. jeh !

PonyProg ist schon sehr antik und wurde damals über eine "echte" RS232 
realisiert (die dann Pegel mit ca. +-15V führte). Diese wurde mittels 
Bitbanging realisiert und wenn ich es noch richtig weiß, gab es keine 
Version hiervon für Linux, sondern nur für Windows.

Ein PonyProg heute ans Laufen zu bringen erfordert schon etwas Wissen 
und in aller Regel eine ältere (bis sehr alte) Hardware, die noch einen 
echten RS232-Port verfügt (eine USB2UART Bridge reicht hier nicht, was 
natürlich die ganzen Adapter, egal mit welchem Chip realisiert 
einschließt).

Wenn ein Arduino, egal ob ein UNO oder ein NANO mittels der 6 pol. 
Stiftleiste (ISP-Anschluß) programmiert wird, ist hier zu wissen, dass 
der Bootloader überschrieben wird und der Arduino hierüber dann 
natürlich nicht mehr erreicht wird (es sei denn, man spielt ihm über 
genau diese Stiftleiste einen neuen Bootloader auf).

Selbst ein USBASP-Programmer (der die USB-Schnittstelle außerhalb jeder 
Spezifikation mittels VUSB realisiert) wird hier bei einem Windows 11 
(zumindest war das bei mir so) relativ schwierig. Unter Linux hatte ich 
mit einem USBasp auch bei einer neuen Version bisher keine Probleme.

Wenn ich das richtig sehe, möchtest du einen alten MCS51 Controller 
(vllt. den AT89S52 ?) von Microchip/Atmel flashen/programmieren. Hier 
solltest du zuerst dein Betriebssystem (Linux) im Griff haben und mal 
schauen, ob du mit dem Nano kommunizieren kannst!

Hier dann die Frage: Hast du Systemweit ein AVRDUDE zur Verfügung oder 
ist dieses nur über deine ArduinoIDE erreichbar.

Wenn du kein Avrdude erreichbar hast ==> installieren.

Hier solltest du dann (unter Linux) etwa so etwas eingeben:
1
avrdude -c arduino -p m328p -P /dev/ttyUSB0 -b 57600 -B 5

obiges gilt für einen Arduino Nano mit seinem Bootloader mit 57600 Baud

Solltesst du auf dem Nano einen anderen Chip als bspw. den CH340G haben, 
ist der Parameter "-P /dev/ttyUSB0" durch "-P /dev/ttyACM0" zu ersetzen.

Wenn Dein Nano (warum auch immer) einen Bootloader installiert hat, der 
als Kommunikationsgeschwindigkeit 115200 Baud erwartet (wie bspw. ein 
UNO), dann ist der Parameter "-b 57600" durch "-b 115200" zu ersetzen.

Wenn du das dann soweit hast, kannst Du schon mal mit dem Arduino (Nano 
oder Uno) kommunizieren.

Im Zip-File 
https://www.mikrocontroller.net/attachment/376289/flashershield.zip sind 
in den Ordnern binaries_32bit und binaries_64bit die Dienstprogramme für 
den PC, die dann, wenn der Arduino mit der Firmeware versehen ist 
kommunizieren kann, um einen AT89S52 zu flashen.

Die Konsolenprogramme heißen hier in beiden Fällen flash51n2. Zusätzlich 
ist in beiden Ordnern noch ein kleines Dienstprogramm vorhanden, das 
sich ch340reset nennt. Dieses hatte ich geschrieben, weil bei mir mit 
einem Board und Ryzen5 CPU der Flashvorgang genau einmal funktioniert 
hatte (in Verbindung mit einem CH340 Chip) und danach die Elektronik aus 
dem USB-Port ausgestöpselt und wieder eingestöpselt werden mußte. Hast 
du also eine Elektronik mit diesem Chip kann es gut sein, vor dem 
eigentlichen Flashvorgang erst das Programm ch340reset auf der Konsole 
zu starten.

Auch wenn ich hier jetzt gleich Schimpfe bekomme: Vllt. solltest du 
deine Experimente auch unter root-Rechten ausführen, damit 
sichergestellt ist, dass du keine Probleme mit den Zugriffsrechten auf 
die Schnittstelle hast.

Die Firmware, für das Flashen eines MCS51 ist in meinem Konsolenprogramm 
direkt hinterlegt. Ich habe die jetzt hier einmal extrahiert und mit 
angefügt. Naaaaatürlich unterscheidet sich die Firmware jetzt nicht, ob 
das Hostprogramm unter einem 32-Bit oder 64-Bit Linux läuft.

Wenn du dir das Script "upload" anschaust, dann steht dort drin:
1
avrdude -c arduino -p m328p -P /dev/ttyUSB0 -b 115200 -U flash:w:uni51_atmega328.hex
2
#avrdude -c arduino -p m328p -P /dev/ttyACM0 -b 115200 -U flash:w:uni51_atmega328.hex

Dieses Script kannst du dir anpassen, je nachdem ob dein Arduino mit 
einem ATMega328 oder einem 168er oder gar (in extrem alt) mit einem 
ATmega8 bestückt ist.

Also:

- Teste, ob dein Arduino unter Linux mittels AVRDUDE erreichbar ist.

- Spiele die Firmware uni51 auf den Arduino auf (Anleitung hast du hier 
ja jetzt, für welche Chips das geht und die einzelnen Hexdateien auch)

- Verbinde die MISO, MOSI, SCK-Leitung des Arduino mit dem AT89S52. 
Leitung D10 des Arduino geht an den Reset des AT89S52. Sorge dafür, dass 
der AT89S einen angeschlossenen Quarz und Ziehkondensatoren hat (12 MHz 
Quarz wäre gut). Schließe den AT89S an +5V an und vergiß die 
Abblockkondensatoren nicht.

- lade ein Programm in den AT89S hoch:
1
flash51n wr /dev/ttyUSB0 helloworld.ihx

hierbei ist helloworld.ihx natürlich dein von dir erstelltes Programm, 
das du im AT89S laufen lassen möchtest

von Johann D. (khs)


Lesenswert?

Danke für die genauen Angaben,
hier noch ein paar Hinweise zur Situation hier
- kam über diesen Link 
Beitrag "Re: Einstieg in 8051 - Atmels AT89S52 oder?"
zu der Seite
- habe hier Linux- und Windows-PCs, auch noch alte mit XP
- bisher immer mit dem (auch schon antiken) ISP-Programmer geflasht
- weil hier nur 89S52 und 89S8253 vorhanden, (PonyProg bedient nur
  89S53 und 89S8252)
- bin, bzw. war, dabei einen neuen (alten, aus mehreren alten) Tower
  herzurichten, Quadcore 3,4 GHz 4 GB, und mit Win10 und Linux
  auszurüsten. Der hätte sogar noch eine echte RS232 und auf dem
  MB einen LPT
- jetzt gerade dabei ein Ubuntu 18.04 aufzuziehen

wenn das geschehen ist, melde ich mich wieder.

Gruß, Hans

von khs (Gast)


Lesenswert?

So, das Ubuntu 18.04 ist jetzt unter dem Benutzer mcu installiert.
Das flashershield.zip entpackt und komplett installiert, somit ist
auch avrdude vorhanden, keine Fehlermeldung, lässt sich auch mit
flashershield problemlos starten.
Zusätzlich habe ich auch noch die neuste Arduinoide installiert.

Nano angeschlossen, /dev/ttyUSB0 ist vorhanden, dann die ersten
Versuche:

mcu@ubu18:~$ avrdude -c arduino -p m328p -P /dev/ttyUSB0 -b 57600 -B 5
avrdude: error while loading shared libraries: libreadline.so.6: cannot 
open shared object file: No such file or directory
mcu@ubu18:~$ sudo avrdude -c arduino -p m328p -P /dev/ttyUSB0 -b 57600 
-B 5
[sudo] Passwort für mcu:
avrdude: error while loading shared libraries: libreadline.so.6: cannot 
open shared object file: No such file or directory
mcu@ubu18:~$ sudo avrdude -c arduino -p m328p -P /dev/ttyUSB0 -b 115200 
-B 5
avrdude: error while loading shared libraries: libreadline.so.6: cannot 
open shared object file: No such file or directory
mcu@ubu18:~$

Wenn ich die Arduinoide starte, erscheint nach select Board
Unknown
/dev/ttyUSB0
der Nano wird also nicht automatisch erkannt.
Habe dann Arduino Nano ausgewählt und versucht ein Blinkprogramm zu
flashen

So, das Ubuntu 18.04 ist jetzt unter dem Benutzer mcu installiert.
Das flashershield.zip entpackt und komplett installiert, somit ist
auch avrdude vorhanden, keine Fehlermeldung, lässt sich auch mit
flashershield problemlos starten.
Zusätzlich habe ich auch noch die neuste Arduinoide installiert.

Nano angeschlossen, /dev/ttyUSB0 ist vorhanden, dann die ersten
Versuche:

mcu@ubu18:~$ avrdude -c arduino -p m328p -P /dev/ttyUSB0 -b 57600 -B 5
avrdude: error while loading shared libraries: libreadline.so.6: cannot 
open shared object file: No such file or directory
mcu@ubu18:~$ sudo avrdude -c arduino -p m328p -P /dev/ttyUSB0 -b 57600 
-B 5
[sudo] Passwort für mcu:
avrdude: error while loading shared libraries: libreadline.so.6: cannot 
open shared object file: No such file or directory
mcu@ubu18:~$ sudo avrdude -c arduino -p m328p -P /dev/ttyUSB0 -b 115200 
-B 5
avrdude: error while loading shared libraries: libreadline.so.6: cannot 
open shared object file: No such file or directory
mcu@ubu18:~$

Wenn ich die Arduinoide starte, erscheint nach select Board
Unknown
/dev/ttyUSB0
der Nano wird also nicht automatisch erkannt.
Habe dann Arduino Nano ausgewählt und versucht ein Blinkprogramm zu
flashen
Vorher Prozessor Atmega328P - old Bootloader
und Port ttyUSB0 ausgewählt

Der Sketch verwendet 924 Bytes (3%) des Programmspeicherplatzes. Das 
Maximum sind 30720 Bytes.
Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers, 2039 
Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
avrdude: ser_open(): can't open device "/dev/ttyUSB0": Permission denied
Fehlgeschlagenes Hochladen: Hochladefehler: exit status 1

Bei meinem anderen Nano hatte ich es schon mal geschafft ihn zu
flashen, ist aber schon lange her und weiß jetzt nicht mehr genau wie 
ich
das damals gemacht hatte.

Bevor ich weiter rummurkse warte ich lieber auf eure Ratschläge.

Gruß, Hans

von khs (Gast)


Lesenswert?

P.S.:Schreibe gerade als Gast, weil ich auf dem neuen PC
das Passwort noch nicht gespeichert ist und so konnte ich das
was doppelt war nicht mehr löschen.

von Jack V. (jackv)


Lesenswert?

khs schrieb:
> error while loading shared libraries: libreadline.so.6: cannot
> open shared object file

Du könntest nun das Paket mit der betreffenden Lib installieren …

von Ralph S. (jjflash)


Lesenswert?


von Johann D. (khs)


Lesenswert?

Hier das Ergebnis nach der Anleitung im obigen Link:

mcu@ubu18:~$ cd /lib/x86_64-linux-gnu/
mcu@ubu18:/lib/x86_64-linux-gnu$ sudo ln -s libreadline.so.7.0 
libreadline.so.6
[sudo] Passwort für mcu:
mcu@ubu18:/lib/x86_64-linux-gnu$ sudo ln -s libreadline7 
libreadline.so.6
[sudo] Passwort für mcu:
mcu@ubu18:/lib/x86_64-linux-gnu$ sudo avrdude -c arduino -p m328p -P 
/dev/ttyUSB0 -b 57600 -B 5
avrdude: error while loading shared libraries: libreadline.so.6: cannot 
open shared object file: No such file or directory
mcu@ubu18:/lib/x86_64-linux-gnu$

Wieder mit der Arduino IDE probiert, diesmal zuerst auf Win7:
Mit den Einstellungen - Arduino Nano, Prozessor Atmega 328P old 
Bootloader,
Programmer ArduinoISP, Port Com8
konnte ich das Blinkprogramm problemlos flashen.
Das gleiche unter Ubuntu 18.04 mit Port ttyUSB0:

Der Sketch verwendet 924 Bytes (3%) des Programmspeicherplatzes. Das 
Maximum sind 30720 Bytes.
Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers, 2039 
Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
avrdude: ser_open(): can't open device "/dev/ttyUSB0": Permission denied
Fehlgeschlagenes Hochladen: Hochladefehler: exit status 1

Die Frage wäre jetzt, wie könnte ich die Firmware mit der 
Windows-Arduinoide
aufspielen (das uni51_atmega328.hex), geht das auch?

Beitrag #7277277 wurde vom Autor gelöscht.
von Johann D. (khs)


Lesenswert?

Oder mit dem Windows-avrdude, wie müsste der Befehl da aussehen?

von Gerhard Z. (germel)


Lesenswert?

Oder nach dem Fehler googeln und (z.B. gemäß Anleitung hier: 
https://docs.arduino.cc/software/ide-v1/tutorials/Linux ) deinen User 
zur Gruppe dialout zufügen.

sudo usermod -a -G dialout <username>

(You may need to logout and back in for the new group to take effect.)

: Bearbeitet durch User
von DerEinzigeBernd (Gast)


Lesenswert?

Johann D. schrieb:
> mcu@ubu18:/lib/x86_64-linux-gnu$ sudo ln -s libreadline.so.7.0
> libreadline.so.6
> [sudo] Passwort für mcu:
> mcu@ubu18:/lib/x86_64-linux-gnu$ sudo ln -s libreadline7
> libreadline.so.6
> [sudo] Passwort für mcu:

Beim zweiten Aufruf von ln ist der erste Parameter ein anderer, das 
zeigt folglich in den Wald.

von Johann D. (khs)


Lesenswert?

Jetzt noch mal eine neue Variante,
bin jetzt auf einem anderen Rechner mit Linux Mint Cinamon 19.3 64bit
und ArduinoIDE 2:1.0.5+dfsg2-4.1
(Gestern auf dem Ubuntu war die allerneueste IDE)
Diesmal mit den Einstellungen
Board - Arduino Nano w/ ATmega328 (Einstellmöglichkeit "old Bootloader"
war nicht vorhanden)
Port - ttyUSB0
Programmer - Arduino as ISP

Damit konnte ich Beispielsprogramme problemlos flashen, doch mit
avrdude:

hans@Dell:~/Downloads$ cd mcs51/
hans@Dell:~/Downloads/mcs51$ ls
firmware  host
hans@Dell:~/Downloads/mcs51$ cd firmware/
hans@Dell:~/Downloads/mcs51/firmware$ ls
Makefile  uni51_atmega168.hex  uni51_atmega328.hex  uni51_atmega8.hex 
uni51_atmega.c  uni51_atmega.hex  upload
hans@Dell:~/Downloads/mcs51/firmware$ avrdude -c arduino -p m328p -P 
/dev/ttyUSB0 -b 115200 -U flash:w:uni51_atmega328.hex
avrdude: error while loading shared libraries: libreadline.so.6: cannot 
open shared object file: No such file or directory
hans@Dell:~/Downloads/mcs51/firmware$ avrdude -c arduino -p m328p -P 
/dev/ttyUSB0 -b 57600 -U flash:w:uni51_atmega328.hex
avrdude: error while loading shared libraries: libreadline.so.6: cannot 
open shared object file: No such file or directory
hans@Dell:~/Downloads/mcs51/firmware$ sudo avrdude -c arduino -p m328p 
-P /dev/ttyUSB0 -b 115200 -U flash:w:uni51_atmega328.hex
[sudo] Passwort für hans:
avrdude: error while loading shared libraries: libreadline.so.6: cannot 
open shared object file: No such file or directory
hans@Dell:~/Downloads/mcs51/firmware$ sudo avrdude -c arduino -p m328p 
-P /dev/ttyUSB0 -b 57600 -B 5
avrdude: error while loading shared libraries: libreadline.so.6: cannot 
open shared object file: No such file or directory


nach dem
hans@Dell:~/Downloads/mcs51/firmware$ sudo usermod -a -G dialout hans
hans@Dell:~/Downloads/mcs51/firmware$ sudo avrdude -c arduino -p m328p 
-P /dev/ttyUSB0 -b 57600 -B 5
avrdude: error while loading shared libraries: libreadline.so.6: cannot 
open shared object file: No such file or directory

Warum das mit der IDE ging und mit avrdude nich??????????

Jetzt probier ich auch noch ein Laptop mit 32bit-19.3er

von Johann D. (khs)


Lesenswert?

> mcu@ubu18:/lib/x86_64-linux-gnu$ sudo ln -s libreadline7
> libreadline.so.6
> [sudo] Passwort für mcu:

>Beim zweiten Aufruf von ln ist der erste Parameter ein anderer, das
>zeigt folglich in den Wald.

Den ersten Anlauf hatte ich aus dem Ubuntu-Link kopiert, da aber
hier nur das Paket libreadline7 vorhanden war habe ich umgeändert.
Es ist aber auch danach nur wieder das libreadline7 vorhanden gewesen.
Sind auch hier nirgends solche Pakete mit "so"-Zusatz zu finden,
auch nicht durch googeln.

von Ralph S. (jjflash)


Lesenswert?

Johann D. schrieb:
> Die Frage wäre jetzt, wie könnte ich die Firmware mit der
> Windows-Arduinoide

Das würde dir gar nix nutzen, da du dann zwar ein funktionierendes 
Flashershield hast, aber die Host-Software dafür nur unter Linux läuft. 
Unter Linux hast du jedoch bisher keine Kommunikation zu deinem CH340G 
Chip auf dem Arduino (Systemweit gesehen) herstellen können.

Demnach wird dann auch meine Host-Software unter deinem Linux nicht 
laufen.

von Johann D. (khs)


Lesenswert?

>Demnach wird dann auch meine Host-Software unter deinem Linux nicht
laufen.

Daran hatte ich auch schon gedacht, ob das flash51ide dann auch die
libreadline.so.6 verlangt.

Kommt mir schon irgendwie komisch vor, daß hier weit und breit kein
libreadline.so.6 vorhanden ist, andererseits dürften doch viele,
viele Linuxuser unterwegs sein, die mit ArduinoIDE und avrdude
klar kommen. Ein Bekannter vom Linuxstammtisch verwendet schon mehr
ESP32, ....vielleicht sind nicht nur die 51er uralt-antik, sondern
auch die AVRs einschließlich Arduinos am aussterben.

Will es aber auch nicht überstrapazieren.

Danke nochmal für die Unterstützung, Gruß, Hans

von Ralph S. (jjflash)


Lesenswert?

Johann D. schrieb:
> Kommt mir schon irgendwie komisch vor, daß hier weit und breit kein
> libreadline.so.6 vorhanden ist

Das ist nicht "komisch", es benötigt "nur" einen korrekten symbolischen 
Link von libreadline.so.7 nach libreadline.so.6

Vielleicht solltest du dich wirklich etwas grundsätzlicher mit Linux 
beschäftigen bevor du das benutzen magst. Kenntnisse auf der Konsole 
sind hier schon von großem Nutzen.

Hmmmm, mal sehen: Wenn ich wieder zu Hause bin, mache ich dir vllt. 
(aber nur vllt.) eine Live-Konsolen-Linux-Version, mit dem du das 
verwenden kannst.

Grundsätzlich aber mußt du eben die Kommunikation vom Rechner zum Device 
hinbekommen (an sich kein Hexenwerk).

Allerdings muß man wissen, was man macht !

von Johann D. (khs)


Lesenswert?

Hier ist und war kein libreadline.so.7 vorhanden, sondern nur ein
libreadline7 ohne "so" (beim 21er Mint glaub' ich, war es ein
libreadline6.
War der Befehl
 sudo ln -s libreadline7 libreadline.so.6
denn kein Befehl zum umbenennen?
Es kam dabei keine Fehlermeldung, aber umbenannt wurde auch nichts.

>symbolischer Link

Oder müsste ich zuvor erst libreadline.so.6 irgendwie erzeugen?
Muß schon zugeben, daß auch mein Englisch nicht so übermäßig ist.

>Live-Konsolen-Linux-Version

Habe auch auf meinem "neuen" PC noch eine andere Baustelle,
kann schon noch etwas Platz freihalten.

von DerEinzigeBernd (Gast)


Lesenswert?

Johann D. schrieb:
> Hier ist und war kein libreadline.so.7 vorhanden

Und das hier hast Du wenigstens gemacht?

> sudo apt-get install libreadline-dev

Poste mal die Ausgabe hiervon:

  ls -al /lib/x86_64-linux-gnu/

(die Zeilen, in denen "libreadline" auftaucht, und zwar alle, sollten 
genügen)

von Gerhard Z. (germel)


Lesenswert?

Poste lieber

ls -al /lib/x86_64-linux-gnu/libread*

sonst ertrinkst du in der Ausgabe. Bei mir (Mint Mate):-rw-r--r-- 1 root 
root 613586 Feb 25  2020 /lib/x86_64-linux-gnu/libreadline.a
lrwxrwxrwx 1 root root     38 Feb 25  2020 
/lib/x86_64-linux-gnu/libreadline.so -> 
/lib/x86_64-linux-gnu/libreadline.so.8
lrwxrwxrwx 1 root root     18 Sep  5  2019 
/lib/x86_64-linux-gnu/libreadline.so.5 -> libreadline.so.5.2
-rw-r--r-- 1 root root 253456 Sep  5  2019 
/lib/x86_64-linux-gnu/libreadline.so.5.2
lrwxrwxrwx 1 root root     18 Nov 15  2016 
/lib/x86_64-linux-gnu/libreadline.so.6 -> libreadline.so.6.3
-rw-r--r-- 1 root root 282392 Feb  4  2016 
/lib/x86_64-linux-gnu/libreadline.so.6.3
lrwxrwxrwx 1 root root     18 May 15  2017 
/lib/x86_64-linux-gnu/libreadline.so.7 -> libreadline.so.7.0
-rw-r--r-- 1 root root 294632 May 15  2017 
/lib/x86_64-linux-gnu/libreadline.so.7.0
lrwxrwxrwx 1 root root     18 Feb 25  2020 
/lib/x86_64-linux-gnu/libreadline.so.8 -> libreadline.so.8.0
-rw-r--r-- 1 root root 319528 Feb 25  2020 
/lib/x86_64-linux-gnu/libreadline.so.8.0

also alles da.

von Johann D. (khs)


Lesenswert?

Muß gestehen, daß ich das übersehen, nicht gemacht hatte.

sudo apt-get install libreadline-dev

Ist unter Synaptic auch als nicht installiert geführt.
Mache zum Unterschied dann vorher und nachher

ls -al /lib/x86_64-linux-gnu/libread*

hans@Dell:~$ ls -al /lib/x86_64-linux-gnu/libread*
lrwxrwxrwx 1 root root     18 Mai 20  2020 
/lib/x86_64-linux-gnu/libreadline.so.5 -> libreadline.so.5.2
-rw-r--r-- 1 root root 249144 Feb  7  2016 
/lib/x86_64-linux-gnu/libreadline.so.5.2
lrwxrwxrwx 1 root root     18 Mai 20  2020 
/lib/x86_64-linux-gnu/libreadline.so.7 -> libreadline.so.7.0
-rw-r--r-- 1 root root 294632 Mai 15  2017 
/lib/x86_64-linux-gnu/libreadline.so.7.0
hans@Dell:~$ sudo apt-get install libreadline-dev
[sudo] Passwort für hans:
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Die folgenden zusätzlichen Pakete werden installiert:
  libtinfo-dev
Vorgeschlagene Pakete:
  readline-doc
Die folgenden NEUEN Pakete werden installiert:
  libreadline-dev libtinfo-dev
0 aktualisiert, 2 neu installiert, 0 zu entfernen und 626 nicht 
aktualisiert.
Es müssen 214 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 1.134 kB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n] J
Holen:1 http://ubuntu.unitedcolo.de/ubuntu bionic-updates/main amd64 
libtinfo-dev amd64 6.1-1ubuntu1.18.04 [81,3 kB]
Holen:2 http://ubuntu.unitedcolo.de/ubuntu bionic/main amd64 
libreadline-dev amd64 7.0-3 [133 kB]
Es wurden 214 kB in 0 s geholt (460 kB/s).
Vormals nicht ausgewähltes Paket libtinfo-dev:amd64 wird gewählt.
(Lese Datenbank ... 272013 Dateien und Verzeichnisse sind derzeit 
installiert.)
Vorbereitung zum Entpacken von 
.../libtinfo-dev_6.1-1ubuntu1.18.04_amd64.deb ...
Entpacken von libtinfo-dev:amd64 (6.1-1ubuntu1.18.04) ...
Vormals nicht ausgewähltes Paket libreadline-dev:amd64 wird gewählt.
Vorbereitung zum Entpacken von .../libreadline-dev_7.0-3_amd64.deb ...
Entpacken von libreadline-dev:amd64 (7.0-3) ...
libtinfo-dev:amd64 (6.1-1ubuntu1.18.04) wird eingerichtet ...
libreadline-dev:amd64 (7.0-3) wird eingerichtet ...
Trigger für install-info (6.5.0.dfsg.1-2) werden verarbeitet ...
hans@Dell:~$ ls -al /lib/x86_64-linux-gnu/libread*
lrwxrwxrwx 1 root root     18 Mai 20  2020 
/lib/x86_64-linux-gnu/libreadline.so.5 -> libreadline.so.5.2
-rw-r--r-- 1 root root 249144 Feb  7  2016 
/lib/x86_64-linux-gnu/libreadline.so.5.2
lrwxrwxrwx 1 root root     18 Mai 20  2020 
/lib/x86_64-linux-gnu/libreadline.so.7 -> libreadline.so.7.0
-rw-r--r-- 1 root root 294632 Mai 15  2017 
/lib/x86_64-linux-gnu/libreadline.so.7.0
hans@Dell:~$

Habe immer unter Synaptic gesucht und nicht in /lib/x86_64-linux-gnu
In Synaptic heißt es auch nach wie vor libreadline7  danach in der 
Spalte
installierte Version 7.0-3.
War immer von dem fehlenden "so" irritiert.
Dann versuche ich jetzt nochmal

hans@Dell:~$ sudo ln -s libreadline.so.7.0 libreadline.so.6
[sudo] Passwort für hans:
hans@Dell:~$ sudo avrdude -c arduino -p m328p -P /dev/ttyUSB0 -b 57600 
-B 5
avrdude: error while loading shared libraries: libreadline.so.6: cannot 
open shared object file: No such file or directory
hans@Dell:~$

Hier nochmal
hans@Dell:~$ ls -al /lib/x86_64-linux-gnu/libread*
lrwxrwxrwx 1 root root     18 Mai 20  2020 
/lib/x86_64-linux-gnu/libreadline.so.5 -> libreadline.so.5.2
-rw-r--r-- 1 root root 249144 Feb  7  2016 
/lib/x86_64-linux-gnu/libreadline.so.5.2
lrwxrwxrwx 1 root root     18 Mai 20  2020 
/lib/x86_64-linux-gnu/libreadline.so.7 -> libreadline.so.7.0
-rw-r--r-- 1 root root 294632 Mai 15  2017 
/lib/x86_64-linux-gnu/libreadline.so.7.0
hans@Dell:~$
Jetzt nochmal mit libreadline.so.7 ohne .0

hans@Dell:~$ sudo ln -s libreadline.so.7 libreadline.so.6
ln: Die symbolische Verknüpfung 'libreadline.so.6' konnte nicht angelegt 
werden: Die Datei existiert bereits

Hat jemand noch eine Idee, wie ich auf ein libreadline.so.6
kommen könnte, oder warum avrdude nichts findet?

Das alles hier wieder auf dem Mint Cinamon 19.3

von Ralph S. (jjflash)


Lesenswert?

vllt. solltest du dich einmal als root einloggen, dann den symbolischen 
Link nach libreadline.so.6 kontrollieren, ggf. neu anlegen und avrdude 
einmal (Betonung liegt auf einmal) als root ausführen!

Du bist der einzige den ich "kenne", der avrdude unter Linux nicht ans 
Laufen bekommt.

Außerdem hattest du in den vergangenen Posts etwas von einem 
"Linux-Stammtisch" geschrieben gehabt. Die sollten dir doch weiterhelfen 
können, oder?

Aus welchem PLZ-Gebiet bist du? Wenn du nicht zu weit weg bist, kann ich 
mir das ganze auch mal anchauen!

von Johann D. (khs)


Lesenswert?

War jetzt zufällig wieder mal im /home/hans, was sehe ich da....
libreadline.so.6

Da ls -al /lib/x86_64-linux-gnu/libread* nur in /lib/x86_64-linux-gnu
sucht hat es es nicht gefunden.

Also, so wie ich das jetzt sehe, muß ich zuerst mit cd nach
/lib/x86_64-linux-gnu
wechseln und dann
sudo ln -s libreadline.so.7.0 libreadline.so.6
ausführen. Bevor ich das mache frage ich jezt lieber noch mal, ob

sudo ln -s libreadline.so.7.0 libreadline.so.6

oder

sudo ln -s libreadline.so.7 libreadline.so.6

richtig sein müsste und ob ich zuvor das im home-Verzeichnis löschen
soll (wie am besten)

Der Linuxstammtisch ist in Rosenheim, bin aber nicht allzuoft dort,
weil ich ca. 30 km entfernt wohne.

Warum bei mir mit einem ganz normalen Mint oder Ubuntu anders sein
soll, das frage ich mich auch schon länger

von Jack V. (jackv)


Lesenswert?

Johann D. schrieb:
> Bevor ich das mache frage ich jezt lieber noch mal, ob
>
> sudo ln -s libreadline.so.7.0 libreadline.so.6
>
> oder
>
> sudo ln -s libreadline.so.7 libreadline.so.6
>
> richtig sein müsste

Der richtige Befehl ist „man ln“, und eins von beiden ist sowieso schon 
ein Link. Man kann Links auf Links erstellen.

Man kann das Programm auch mit Pfaden aufrufen. Tut man das nicht, 
arbeitet man natürlich im derzeitigen Arbeitsverzeichnis – das Programm 
ist leider nicht gegen libglaskugel.so.42 gelinkt, so dass es ohne die 
Angabe der Pfade nicht erraten kann, wo du einen Link erstellen 
möchtest.

: Bearbeitet durch User
von Johann D. (khs)


Lesenswert?

Danke für die Antwort, doch mit "man ln" komme ich immer nur auf
die Manualseite, was ich auch erwartet hatte.

hans@Dell:~$ sudo rm libreadline.so.6
[sudo] Passwort für hans:
hans@Dell:~$ cd /lib/x86_64-linux-gnu

hans@Dell:/lib/x86_64-linux-gnu$ sudo ln -s libreadline.so.7.0 
libreadline.so.6


hans@Dell:/lib/x86_64-linux-gnu$ sudo avrdude -c arduino -p m328p -P 
/dev/ttyUSB0 -b 57600 -B 5
avrdude: error while loading shared libraries: libtermcap.so.2: cannot 
open shared object file: No such file or directory
hans@Dell:/lib/x86_64-linux-gnu$ sudo avrdude -c arduino -p m328p -P 
/dev/ttyUSB0 -b 115200 -B 5
avrdude: error while loading shared libraries: libtermcap.so.2: cannot 
open shared object file: No such file or directory

Ein libtermcap* habe ich in /lib/x86_64-linux-gnu nicht gefunden
und auch unter /lib nicht.

von Jack V. (jackv)


Lesenswert?

libtermcap.so ist in Debian und -derivaten in libncurses-dev.

Dein System benutzt apt für das Paketmanagement – man kann damit nach 
Dateien in Paketen suchen. Nachdem du das Geheimnis von ›man‹ nun 
kennst, wäre das für die nächste fehlende Lib ja mal eine nette Übung?

von Ralph S. (jjflash)


Lesenswert?

... langsam stellt sich mir die Frage, wie stark abgespeckt das Mint 
Cinamon von Johann ist ?!? (und was das ganze noch mit dem Flashershield 
bzw. der Software hierfür zu tun hat).

Hier geht es mittlerweile nur noch darum, Avrdude auf einem Linuxsystem 
zum Laufen zu bekommen und hätte wohl eher einen eigenen Thread 
"verdient"

von Johann D. (khs)


Lesenswert?

Zuerst muß ich wieder mal gestehen, daß beim letzten Versuch mit

sudo avrdude -c arduino -p m328p -P /dev/ttyUSB0 -b 57600 -B 5

der Nano gar nicht angeschlossen war, jetzt aber bei der Wiederholung
mit Arduino das gleiche rauskam.

libtermcap.so fand ich jetzt bei der Suche mit dem normalen
Dateibrowser mit "libtermcap*" in
/usr/lib/x86_64-linux-gnu
als libtermcap.so aber nirgends ein libtermcap.so.2

Nach
sudo apt-get install libncurses-dev
die gleiche Suche nochmal, aber auch nur das vorherige Ergebnis.

sudo apt search libtermcap*

kam ohne irgendeine Meldung zurück.


>... langsam stellt sich mir die Frage, wie stark abgespeckt das Mint

Wie schon genannt momentan das 19.3 und weiter oben berichtet waren
schon das Mint Cinnamon 21 und Ubuntu 18.04 alle mit dem gleichen
Erscheinen.
Das waren immer ganz normale isos gesaugt über die einschlägigen
Quellen und ganz standardmäßig installiert (ohne irgendwelche
Experteneinstellungen)
Habe auch schon angedacht, über einen anderen Thread zu fragen,
ob da noch welche sind, die damit keine Probleme mit AVR und
Arduino haben.

von Ralph S. (jjflash)


Lesenswert?

Johann D. schrieb:
> die damit keine Probleme mit AVR und
> Arduino haben.

Das hat mit Arduino (oder gar dem Flashershield) gar nichts zu tun, 
sondern damit, das Avrdude für seine Arbeit eben bestimmte 
Abhängigkeiten hat, die "normalerweise" bei einer Linuxinstallation 
schlicht mitinstalliert werden.

Evtl. kann ich noch verstehen, dass in Zeiten von Desktopsystemen evtl. 
NCurses nicht mehr mitinstalliert wird, allerdings erschließt sich mir 
das nicht ganz, weil auf jedem System (ich kann hier nur für Slackware, 
Debian und als Debianderivat Ubuntu sprechen) das ich benutze, zumindest 
immer auch der Midnight Commander mitinstalliert ist, damit ich 
Dateiverwaltung auf der Konsole relativ komfortabel erledigen kann. Der 
Midnight Commander ist hier wohl eines der "berühmten" Beispiele für die 
Verwendung von NCurses.

Nun ist es grundsätzlich auch möglich, Avrdude in ein separates 
Verzeichnis zu installieren (wie das Arduino macht) und sämtliche 
Abhängigkeiten darin mit zu speichern (was einen unkomplizierten Umgang 
auf jedem System ermöglicht), aber besser ist es, solche Tools 
systemweit zur Verfügung zu haben, wenn man solche Dinge wie 
Mikrocontrollerschaltungen entwickelt.

Die Arduino-IDE führt hier dann dazu, dass bspw. der avr-gcc dann 
doppelt installiert ist, wenn man nicht ausschließlich mit dem Arduino 
programmiert. Gleiches gilt dann für die ARM-Controller, die dann den 
C-Compiler dann im Arduinoverzeichnis haben ... und eben noch einmal 
Systemweit.

Ich bin ein (ur)alter Mensch und liebe es schlanke bis sehr schlanke 
Installationen zu haben die dann den Vorteil haben, noch auf uralten 
Systemen zu laufen.

Was jetzt mit deiner Distribution los ist, dass diesem so viele 
Libraries fehlen erschließt sich mir nicht !
---------------------------------------------

also:
erster Check nach libncurses*

ls -al /lib/x86_64-linux-gnu/libncurses*

wirst du hier fündig, mußt du einen Link auf libtermcap.so.2 erstellen.

Gesetzt den Fall es wurde Version 5.7 von ncurses gefunden, folgendes 
als Root ausführen:

cd /lib/x86_64-linux-gnu
ln -s /lib/libncurses.so.5.7 /lib/libtermcap.so.2

wurde grundsätzlich kein Ncurses gefunden => nachinstallieren. 
Libtermcap ist nicht mehr "eigentständig" sondern ein Bestandteil von 
Ncurses.

von Johann D. (khs)


Lesenswert?

hans@Dell:~$ ls -al /lib/x86_64-linux-gnu/libncurses*
lrwxrwxrwx 1 root root     17 Mai 20  2020 
/lib/x86_64-linux-gnu/libncurses.so.5 -> libncurses.so.5.9
-rw-r--r-- 1 root root 141248 Mai 23  2018 
/lib/x86_64-linux-gnu/libncurses.so.5.9
lrwxrwxrwx 1 root root     18 Mai 20  2020 
/lib/x86_64-linux-gnu/libncursesw.so.5 -> libncursesw.so.5.9
-rw-r--r-- 1 root root 190400 Mai 23  2018 
/lib/x86_64-linux-gnu/libncursesw.so.5.9
hans@Dell:~$ cd /lib/x86_64-linux-gnu
hans@Dell:/lib/x86_64-linux-gnu$ sudo ln -s /lib/libncurses.so.5.9 
/lib/libtermcap.so.2




hans@Dell:/lib/x86_64-linux-gnu$ sudo avrdude -c arduino -p m328p -P 
/dev/ttyUSB0 -b 57600 -B 5
avrdude: error while loading shared libraries: libtermcap.so.2: cannot 
open shared object file: No such file or directory


Mit der Browsersuche wurde libtermcap.so.2 dann unter lib als
Verknüpfung(fehlerhaft) angezeigt

hans@Dell:/lib/x86_64-linux-gnu$ ls -al 
/lib/x86_64-linux-gnu/libtermcap*
ls: Zugriff auf '/lib/x86_64-linux-gnu/libtermcap*' nicht möglich: Datei 
oder Verzeichnis nicht gefunden
hans@Dell:/lib/x86_64-linux-gnu$ cd /lib
hans@Dell:/lib$ ls -al /lib/x86_64-linux-gnu/libtermcap*
ls: Zugriff auf '/lib/x86_64-linux-gnu/libtermcap*' nicht möglich: Datei 
oder Verzeichnis nicht gefunden

>Avrdude in ein separates Verzeichnis zu installieren (wie das Arduino
 macht) und sämtliche Abhängigkeiten darin mit zu speichern

Kann nur daran erinnern, daß auch mit der ArduinoIDE 2.  unter Mint 21
das flashen vom Nano nicht funktionierte.

Falls hier jemand mitliest und bei dem auf einem neueren Mint oder
Ubuntu das alles funktioniert, bitte melden.

von JJFlash (Gast)


Lesenswert?

Johann D. schrieb:
> hans@Dell:/lib/x86_64-linux-gnu$ sudo ln -s /lib/libncurses.so.5.9
> /lib/libtermcap.so.2

Wieso hast du den Link im Verzeichnis /lib angelegt und nicht in 
/lib/x86_64-linux-gnu ?

------------------------------
melde dich als root an (mit su), dann:

cd /lib/x86_64-linux-gnu

ln libncurses.so.5.9 libtermcap.so.2

------------------------------

Maaaaaaaaaaann

von Johann D. (khs)


Lesenswert?

Maaaaannnnn,
hast Du nicht gesehen, was ich ein paar Zeilen weiter oben geposted
hatte?

hans@Dell:~$ cd /lib/x86_64-linux-gnu
hans@Dell:/lib/x86_64-linux-gnu$ sudo ln -s /lib/libncurses.so.5.9
/lib/libtermcap.so.2

Warum der Link in /lib/x86_64-linux-gnu$ nicht entstanden ist und
nur mit der Browsersuche als fehlerhaft in /lib kann ich mir auch nicht
erklären.

von DerEinzigeBernd (Gast)


Lesenswert?

Johann D. schrieb:
> hast Du nicht gesehen, was ich ein paar Zeilen weiter oben geposted
> hatte?

Wird er schon haben, denn das ist falsch.

1
hans@Dell:~$ cd /lib/x86_64-linux-gnu
2
hans@Dell:/lib/x86_64-linux-gnu$ sudo ln -s /lib/libncurses.so.5.9 /lib/libtermcap.so.2

> Warum der Link in /lib/x86_64-linux-gnu$ nicht entstanden ist ...

Du übergibst für beide Parameter von "ln" absolute Pfade. Und damit 
ist es scheißegal, in welches Verzeichnis Du vorher mit "cd" gewechselt 
bist.

> und nur mit der Browsersuche als fehlerhaft in /lib

Du hast einen Link in /lib erzeugt, der auf etwas in /lib nicht 
existierendes verweist. Denn in /lib gibt es kein libcncurses.so.5.9, 
das liegt in /lib/x86_64-linux-gnu.

Mach das entweder so (ohne Pfadangabe):
1
hans@Dell:~$ cd /lib/x86_64-linux-gnu
2
hans@Dell:/lib/x86_64-linux-gnu$ sudo ln -s libncurses.so.5.9 libtermcap.so.2

oder so (mit absoluten, aber richtigen Pfaden):
1
hans@Dell:/lib/x86_64-linux-gnu$ sudo ln -s /lib/x86_64-linux-gnu/libncurses.so.5.9 /lib/x86_64-linux-gnu/libtermcap.so.2


Du solltest, wenn Du mit Linux arbeitest, das Konzept von Verzeichnissen 
bzw. Pfaden noch etwas ausführlicher verstehen. Das ist übrigens unter 
DOS oder Windows auch nicht anders (nur, daß man dort \ als Trenner 
verwendet).

von Johann D. (khs)


Lesenswert?

Danke, jetzt habe ich es auch bemerkt, bzw. kapiert, warum ein Fehler
erzeugt wurde.
Auf ein neues:

hans@Dell:~$ cd /lib/x86_64-linux-gnu
hans@Dell:/lib/x86_64-linux-gnu$  sudo ln -s libncurses.so.5.9 
libtermcap.so.2
[sudo] Passwort für hans:
hans@Dell:/lib/x86_64-linux-gnu$ ls -al 
/lib/x86_64-linux-gnu/libtermcap*
lrwxrwxrwx 1 root root 17 Dez 18 12:16 
/lib/x86_64-linux-gnu/libtermcap.so.2 -> libncurses.so.5.9
hans@Dell:/lib/x86_64-linux-gnu$ sudo avrdude -c arduino -p m328p -P 
/dev/ttyUSB0 -b 57600 -B 5

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.00s

avrdude: Device signature = 0x1e950f (probably m328p)

avrdude: safemode: Fuses OK (E:00, H:00, L:00)

avrdude done.  Thank you.


Habe eher geglaubt, daß es wieder ein fehlendes lib sucht,
jetzt könnte vielleicht der old Bootloader noch ein Problem werden.
Schau mir als nächstes mal
man avrdude
an.

von DerEinzigeBernd (Gast)


Lesenswert?

Johann D. schrieb:
> avrdude done.

Herzlichen Glückwunsch.

von Johann D. (khs)


Lesenswert?

Nun ist auch die Firmware drauf:

hans@Dell:~$ cd /home/hans//Downloads/mcs51/firmware
hans@Dell:~/Downloads/mcs51/firmware$ sudo avrdude -c arduino -p m328p 
-P /dev/ttyUSB0 -b 57600 -U flash:w:uni51_atmega328.hex
[sudo] Passwort für hans:

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.00s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be 
performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "uni51_atmega328.hex"
avrdude: input file uni51_atmega328.hex auto detected as Intel Hex
avrdude: writing flash (4116 bytes):

Writing | ################################################## | 100% 
1.24s

avrdude: 4116 bytes of flash written
avrdude: verifying flash memory against uni51_atmega328.hex:
avrdude: load data flash data from input file uni51_atmega328.hex:
avrdude: input file uni51_atmega328.hex auto detected as Intel Hex
avrdude: input file uni51_atmega328.hex contains 4116 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 
0.94s

avrdude: verifying ...
avrdude: 4116 bytes of flash verified

avrdude: safemode: Fuses OK (E:00, H:00, L:00)

avrdude done.  Thank you.


Vielen Dank nochmal allen Unterstützern, nun kann es auch mit dem
Thema dieses Threads weitergehen.

Muß aber vorher noch Hardware, Jumper und Verbindungskabel herrichten.

: Bearbeitet durch User
von Ralph S. (jjflash)


Lesenswert?

Jetzt hatte ich eigentlich gedacht gehabt, dass sich Johann noch einmal 
meldet, ob er nun erfolgreich einen AT89S52 hat flashen können oder 
nicht!

(aber vllt. konnte er das nicht und "traut" sich jetzt nicht mehr hier 
zu fragen?)

Eine Rückmeldung nach geleisteter großer Hilfe von einigen hier wäre 
schon nett gewesen !

von Johann D. (khs)


Lesenswert?

Bitte um Entschuldigung, dafür dass ich mich so lange nicht mehr 
gemeldet
habe. War so lange mit dem einrichten meines "neuen" PCs beschäftigt,
dabei zum erstenmal mit EFI und GPT konfrontiert.
Bis ich dann Win10 und Mint 21 nebeneinander auf die Platte bekam
hat schon gedauert. Nun habe ich gerade auf dem neuen die symbolischen
Links (auf die inzwischen wieder neueren Versionen) gelegt.
Die Leitungen und Stecker zwischen Arduino und MC herstellen kommen
als nächstes, bin aber schon zuversichtlich, dass ich in einigen
Tagen positives berichten kann.

Gruss, Hans

von Johann D. (khs)


Lesenswert?

Habe jetzt Hardware für die Verbindung des Nano zum 51er zusammen-
gelötet und wollte mit dem Mint 21 den MC flashen.
Habe deshalb gewartet, weil ich da den Benutzer gleich als
mcu eingerichtet habe. Doch damit funktionierte weder das
Firmware aufspielen, noch das Flashen.
Es ist nicht mal ein /dev/ttyUSB zu finden

Zuerst ohne Fehlermeldung die Software installiert:
All selected programs will be copied to: /usr/local/bin

Installing files for 64 Bit Linux


Install FlasherShield main software CIDE [y/n] ? y

Install AVRDUDE ver. 6.3 (hostprogram for AVR microcontrollers [y/n] ? y

Install Flash51ide / flash51n2 (hostprogram for MCS51 microcontrollers 
[y/n] ? y

Install ArdPicProg (hostprogram for PIC16F microcontrollers [y/n] ? y

Install FreeVison styled texteditor CIDE [y/n] ? y

copying file: flashershield
copying file: ch340reset
copying file: avrdude
copying file: avrdude.conf
copying file: flash51ide
copying file: flash51n2
copying file: ardpicprog
copying file: cide

mcu@aqua:/lib/x86_64-linux-gnu$ sudo avrdude -c arduino -p m328p -P 
/dev/ttyUSB0 -b 57600 -B 5
avrdude: symbol lookup error: avrdude: undefined symbol: usb_busses

mcu@aqua:/lib/x86_64-linux-gnu$ man avrdude
Kein Handbucheintrag für avrdude vorhanden

mcu@aqua:/lib/x86_64-linux-gnu$ ls -al /dev/ttyUSB*
ls: Zugriff auf '/dev/ttyUSB*' nicht möglich: Datei oder Verzeichnis 
nicht gefunden. Auch mit dem Browser finde ich in /dev kein ttyUSB

Externe Festplatte und USB-Stick funktionieren.

Beim Versuch, mit flashershield zu flashen fand ich nur den
write-Befehl, aber keine Einstellmöglichkeit welcher MC-Typ.
Erkennt das die Software normalerweise automatisch?

Da kam dann
waiting for sync. adapter...
Target device did not answer...

Werde dann doch mit dem 19.3er Mint nochmal testen.

von Johann D. (khs)


Angehängte Dateien:

Lesenswert?

So, falls noch jemand mitliest, jetzt konnte ich einen AT89S52
über den Nano flashen. Nachdem keine Fehlermeldung kam,
gehe ich jetzt mal davon aus, dass das File auch korrekt aufgespielt
ist. Zum testen des MC bin ich  noch nicht gekommen, auch den
AT89S8253 habe ich jetzt noch nicht probiert.

hans@Dell:~$ asem tneu.asm
hans@Dell:~$ flash51ide wr /dev/ttyUSB0 /home/hans/tneu.hex
waiting for sync. adapter...

writing flash (3320 bytes)
Flashing time: 20.69s
flash51 done, thank you


Aber damit es hier nicht langweilig wird, hier noch ein paar
Angaben, wie es soweit kam:

Wie im letzten Post schon geschrieben gab es in meinem neuesten
PC mit Mint 21 (und EFI-Partition) in /dev kein ttyUSB.
Habe dann mit dem Anwendungsmanager auch eine ArduinoIDE
installiert, darin war dann auch weder eine Porteinstellung,
noch eine Boardeinstellung möglich.
Warum dann ein USB-Stick, eine USB-Festplatte und natürlich
auch eine USB-Maus funktionieren??????
Dafür aber kann man mit
flashershield
problemlos das Fenster öffnen.
Wenn auch das flashen nicht funktionierte, wurde doch unten der
erforderliche Befehl
flash51ide wr /dev/ttyUSB0 /home/hans/.....hex
angezeigt. Das war für mich wieder wichtig, weil hier bei dem
19.3er Mint (64-Bit) das Fenster nicht aufging.

hans@Dell:~/Videos/flashershield$ flashershield
An unhandled exception occurred at $00000000004010D3 :
EInOutError : Read past end of file
  $00000000004010D3
  $0000000000406659
auch als sudo nicht.
Auch bei einem 19.3er auf 32-Bit-Laptop nicht.

hans@IBM-T42:/usr/local/bin$ sudo flashershield
/usr/local/bin/flashershield: 1: /usr/local/bin/flashershield: ELF: not 
found
/usr/local/bin/flashershield: 2: /usr/local/bin/flashershield: �: not 
found
/usr/local/bin/flashershield: 3: /usr/local/bin/flashershield: �: not 
found
/usr/local/bin/flashershield: 4: /usr/local/bin/flashershield: �j�j��: 
not found
/usr/local/bin/flashershield: 5: /usr/local/bin/flashershield: ��: not 
found
/usr/local/bin/flashershield: 6: /usr/local/bin/flashershield: Syntax 
error: ")" unexpected

Wenn ich mich recht erinnere, war es bei beiden 19.3ern gleich nach
dem installieren einmal möglich das Fenster mit flashershield zu
öffnen. Trotzdem bin ich Ralph für die Programmsammlung dankbar,
weil es so oder so doch hilfreich ist.

Zur Hardware hier noch:
Damit ich meinen bisherigen Parallelport-Programmer, bzw. die Leitungen
für die In-System-Programmierung an einem Projekt
nicht ändern musste, habe ich einfach
die 4 Steuerleitungen vom Arduino auf eine 25pol.-Sub-D-Buchse gelegt
und den Strobe-Pin auf Gnd, und natürlich Gnd und Gnd verbunden.
die Hardware programmerseitig ist hier beschrieben
http://www.lancos.com/e2p/betterSTK200.gif
die Buchsenbelegung allerdings wie für den ISP-Programmer
https://www.windows7download.com/win7-isp-programmer/tzwqylih.html
Das soll nur verdeutlichen, dass es auch mit dem Treiber und Abblock-
kondensatoren geht. Bei einem neuen Projekt will ich dann auch die
direkte Verbindung von Arduino und MC versuchen.

Als nächstes werde ich wohl das Mint 21 durch ein anderes Linux
ersetzen und als Dankeschön gibt's auch noch ein Foto.

Gruß, Hans

von Johann D. (khs)


Lesenswert?

Habe gerade auf dem Rechner mit Mint21 und GPT - EFI Festplatte
das ältere 19.3er Mint installiert und auch jetzt ist in /dev
wieder kein ttyUSB0.
Will aber hier diesen Thread nicht noch mehr mit anderen
Themen vermüllen.

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
Noch kein Account? Hier anmelden.