Forum: Mikrocontroller und Digitale Elektronik arduino micro kann nicht programmiert / geflast werden


von guest78987 (Gast)


Lesenswert?

Hallo,
mein Arduino micro lässt sich seit mehreren Wochen nicht mehr 
programmieren. Ich war gerade dabei ein selbstgebautes lenkrad zu 
programmieren und hatte ein programm laufen, welches per serielle 
schnittstelle daten an den pc sendete. Das programm läuft immernoch, 
allerdings werden immer dieselben werte gesendet, selbst wenn der 
arduino garnicht eingebaut ist.
Hier das programm das auf µc ist:


//#include <Joystick.h>

int Kupplung;
int Bremse;
int Gas;
int Kupplung1;
int Bremse1;
int Gas1;
int s;



void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
for (int i=2; i<17;i++){
pinMode(i,INPUT);}

for (int i=2; i<17;i++){
digitalWrite(i,HIGH);}

//Joystick.begin();
}

void loop() {
  if(Serial.available() > 0) {Serial.end();}
  for (int i = 2; i < 17; i++){
  s = digitalRead(i);
  if (s == 0){s = 1;}
  else {s = 0;}
  //  Joystick.setButton(i,s);
  }

//Kupplung
  Kupplung = analogRead(A3);
  //poti2 = map(poti,47,990,-127,127);
  //Joystick.setZAxis(poti2);
//Bremse
  Bremse = analogRead(A4);
  Bremse1 = map(Bremse,0,485,0,127);
  //Joystick.setXAxis(Bremse1);
  Serial.println(Bremse);
//Gas
  Gas = analogRead(A5);
  Gas1 = map(Gas,634,914,0,127);
  //Joystick.setYAxis(Gas1);
  Serial.println(Gas);

 /*Serial.print(analogRead(A3));
  Serial.println(" =Kupplung");
  Serial.print(analogRead(A4));
  Serial.println(" =Bremse");
  Serial.print(analogRead(A5));
  Serial.println(" =Gas");*/

delay(50);
}









Hier die fehrlermeldung wenn reset bis "hochladen" gedrückt wird:
Der Sketch verwendet 5.884 Bytes (20%) des Programmspeicherplatzes. Das 
Maximum sind 28.672 Bytes.
Globale Variablen verwenden 182 Bytes (7%) des dynamischen Speichers, 
2.378 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.560 
Bytes.
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {COM9, } => {}
PORTS {COM9, } / {} => {}
PORTS {} / {} => {}
PORTS {} / {COM10, } => {COM10, }
Found upload port: COM10
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude 
-CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v 
-patmega32u4 -cavr109 -PCOM10 -b57600 -D 
-Uflash:w:C:\Users\Julian\AppData\Local\Temp\build1fd255a953a8c14710f29c 
1c59ff99b2.tmp/Lenkrad.ino.hex:i

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "C:\Program Files 
(x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM10
         Using Programmer              : avr109
         Overriding Baud Rate          : 57600
         AVR Part                      : ATmega32U4
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PA0
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page 
Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages 
MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ 
----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0 
9000  9000 0x00 0x00
           flash         65     6   128    0 yes     32768  128    256 
4500  4500 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0 
9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0 
9000  9000 0x00 0x00
           efuse          0     0     0    0 no          1    0      0 
9000  9000 0x00 0x00
           lock           0     0     0    0 no          1    0      0 
9000  9000 0x00 0x00
           calibration    0     0     0    0 no          1    0      0 
0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0 
0     0 0x00 0x00

         Programmer Type : butterfly
         Description     : Atmel AppNote AVR109 Boot Loader

Connecting to programmer: .avrdude: butterfly_recv(): programmer is not 
responding
Problem beim Hochladen auf das Board. Hilfestellung dazu unter 
http://www.arduino.cc/en/Guide/Troubleshooting#upload.

Ich habe schon alles mögliche versucht, aber der arduino will sich 
einfach nicht mehr programmieren lasse!
Ich bitte um eure hilfe

von guest78987 (Gast)


Lesenswert?

PS: Die angezeigten Werte sind IMMER 267 und 176. Vielleicht hilft euch 
das weiter :-/

von guest78987 (Gast)


Lesenswert?

Noch was:
Die erste zeile nach loop:
if(Serial.available() > 0) {Serial.end();}
hab ich erst vor kurzem hinzugefügt, dass ich, wenn ich das programm 
hochladen kann, die serielle schnittstelle deaktivieren kann.
Hätte ich besser seit anfang ins programm gemacht..

von Kaj (Gast)


Lesenswert?

guest78987 schrieb:
> Hätte ich besser seit anfang ins programm gemacht..
Das ist nicht dein Problem.

guest78987 schrieb:
> if(Serial.available() > 0) {Serial.end();}
> hab ich erst vor kurzem hinzugefügt, dass ich, wenn ich das programm
> hochladen kann, die serielle schnittstelle deaktivieren kann.
> Hätte ich besser seit anfang ins programm gemacht..
Das ist völlig unnötig, denn dieser Code interessiert den Bootloader 
herzlich wenig.

Der Bootloader funktioniert so:
Die Arduino IDE macht einen Softreset (bei manchen Arduino-Boards 
funktioniert das nicht, und man muss durch drücken der Reset-Taste 
nachhelfen).

Nach dem Reset führt der uC ca. 0.5 Sekunden lang den Bootloader aus, 
und wartet auf Daten. Für diese Zeit spielt dein Programm absolut keine 
Geige.

Kommen keine Daten wird dein Programm geladen und ausgeführt.
Ab diesem Zeitpunkt spielt der Bootloader keine Geige mehr.

Außerdem ist es von der Logik her unschön, wenn du die 
Serielleschnittstelle zumachst (Serial.end()) und später trotzdem 
versuchst was zu schreiben(Serial.println()).
Keine Ahnung was das Arduino-Gedöns macht, wenn man versucht auf die 
geschlossene Schnittstelle zu schreiben.

guest78987 schrieb:
> -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v
> -patmega32u4 -cavr109 -PCOM10 -b57600 -D
> -Uflash:w:C:\Users\Julian\AppData\Local\Temp\build1fd255a953a8c14710f29c
> 1c59ff99b2.tmp/Lenkrad.ino.hex:i
Rufst du das Ding von Hand auf?
Benutzt die die Arduino IDE? Welche Version?
Benutzt du die IDE von arduino.cc oder von arduino.org?

von guest78987 (Gast)


Lesenswert?

Hallo,
Wenn ich das richtig verstanden habe funktioniert also mein bootloader 
nicht mehr richtig, oder? Denn ich habe schon oft die arduino ide 
geschlossen (version 1.6.4 von arduino.cc), den resetknopf am arduino 
gedrückt, die ide wieder gestartet, ein leeres programm geöffnet und auf 
hochladen geklickt und sobald "hochladen" erschien den resetknopf wieder 
losgelassen. Der arduino wird ja auch erkannt und sendet daten an die 
serielle Schnittstelle. Die Meldung "programmer is not responding" kommt 
auch jedes mal, was ja eigentlich auch nur am bootloader liegen kann 
oder? Ausserdem wird auch ab und zu "port busy" angezeigt. Gibt es 
irgend eine Möglichkeit den arduino zu retten oder muss ich mir einen 
zweiten kaufen und mit diesem den bootloader neu flashen? Was ich auch 
sehr komisch finden ist, dass immer die gleichen werte im seriellen 
Monitor angezeigt werden, was bei einem funktionsfähigen arduino ja 
nicht sein kann?

Kaj schrieb:
> guest78987 schrieb:
> -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v
> -patmega32u4 -cavr109 -PCOM10 -b57600 -D
> -Uflash:w:C:\Users\Julian\AppData\Local\Temp\build1fd255a953a8c14710f29c
> 1c59ff99b2.tmp/Lenkrad.ino.hex:i
>
> Rufst du das Ding von Hand auf?
> Benutzt die die Arduino IDE? Welche Version?
> Benutzt du die IDE von arduino.cc oder von arduino.org?


Was meinst du mit von Hand aufrufen? Ich klick einfach auf hochladen.

Und was mir, nach deiner erklärung, wie der bootloader funktioniert auch 
komisch vorkommt, ist dass wenn ich wie oben beschrieben den reset knopf 
bis hochladen drücke, der Arduino erst nach etwa 0,5s, also wenn ja 
eigentlich schon das programm läuft, von der IDE erkannt wird.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

guest78987 schrieb:
> if (s == 0){s = 1;}
>   else {s = 0;}

Welchen Sinn hat der Else-Zweig?

von guest78987 (Gast)


Lesenswert?

Ohne diese beiden zeilen:
Taster am lenkrad gedrückt -> pin wird low -> 0
Taster wird nicht gedrückt: durch pullup pin high -> 1

Da es ja genau umgekehrt sein soll habe ich diese beiden zeilen 
eingebaut.
Aus 0 wird 1 und aus 1 wird 0.

Ohne else ist die variable ja immer 1??

Das programm hat so auf jeden fall funktioniert

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

guest78987 schrieb:
> Ohne else ist die variable ja immer 1??

Sorry, hab da was anderes gelesen. hast recht.

von Dieter S. (Gast)


Lesenswert?

Kaufe dir einen preiswerten Pro Mini und flashe den micro per ISP.
Benutze dazu Arduino as ISP.
Anleitungen dazu gibt es im Netz reichlich.

von guest78987 (Gast)


Lesenswert?

Ok danke
Und sonst gibt es keine Möglichkeit den micro wieder zu programmieren?

von Dieter S. (Gast)


Lesenswert?

Du kannst es ja noch mit einem USB-Serial-Wandler versuchen.
Könnte auch funktionieren, da bin ich jetzt aber nicht so sicher.

von guest78987 (Gast)


Lesenswert?

Hallo,
ich habe mir jetzt mittlerweilevielleichtweiten, nichtoriginalen arduino 
micro gekauft und versucht, mit diesem auf meinen original arduino micro 
einen neuen bootloader zu brennen. Der nachbauarduino wurde auf Anhieb 
ganz normal von der IdE erkannt und funktioniert auch einwandfrei.

Ich habe also die pins (alle an der Unterseite, nicht am icsp Anschluß) 
miso, mosi, sck, 5v, gnd und pin 10 an den icsp anschluss des defekten 
arduino micro angeschlossen.  Die power led des def. Arduino leuchtete, 
sobald der andere arduino per usb an den pc angeschlossen wurde. Als 
nächstes habe ich dann auf den funktionsfähigen arduino das isp sketch 
geladen, arduino as isp als programmer ausgewählt und bin dann auf 
bootloader brennen. Doch leider kam, genauso wie wenn ich ihn direkt per 
usb programmieren will "programmer is not responding" und noch irgendwas 
mit "not in sync" die IDE probierte das ganze 10 mal, ohne erfolg.

Jetzt ist meine frage, ob der arduino vieleicht kaputt sein könnte (er 
ist erst wenige monate alt und wurde teuer bei conrad gekauft) oder ob 
ich eventuell was falsch gemacht hab?
Läuft sowas eventuell auch über Garantie, also dass ich das ganze über 
conrad reklamiere und dann einen neuen bekomm bzw. Der alte repariert 
wird oder sind solche Fälle von der Garantie ausgeschlossen?

von guest78987 (Gast)


Lesenswert?

Sorry in der zweiten zeile hat wohl die autokorektur bisschen mist 
gebaut. Das soll natürlich "ich habe mir jetzt einen zweiten, 
nichtoriginalen arduino micro gekauft..." heissen.

von Dieter S. (Gast)


Lesenswert?

Kann kaputt sein oder auch nicht.
Ich würde mal alle Anschlüsse deines ISP-Programmers überprüfen.

Ob du das reklamieren und als Garantie abwickeln kannst musst du mit 
Conrad klären.

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.