Neuer IC reagiert nicht

Hallo zusammen,

nachdem ich gestern den ersten IC sowas bekommen hab, dass er die Basis kann, was ich will, wollte ich jetzt mal einen zweiten dazu bringen, das selbe zu tun, um in Anschluss eine Kommunikation zwischen den beiden herzustellen.

Gesagt, getan: IC ausgewechselt, Sketch aufgespielt, blöd geschaut. Beim ersten kommt jeden zweiten Upload-versuch die Fehlermeldung, ich hatte den falschen µC angegeben. Beim nächsten versuch gehts wieder. Na gut soweit. Sketch ist drauf. Serial-Überwachung am USB-Konverter leuchtet dauerhaft. Wtf? Der soll nur Daten schicken/empfangen auf Befehl, welchen ich nicht gegeben hab. Serial Monitor öffnen, steht nichts drin.
Na gut, vielleicht ist der kaputt, also nächsten. Ausgetauscht, aufgespielt, gewartet. Hat der eine andere Taktung? Beim aller ersten IC war bei delay(1000); 1 Sekunde warten angesagt. Bei dem sind's auf einmal 10 Sekunden?! Na ja, dann mal weiter. Drück ich den Taster, wartet er ewig und schickt dann eine leere Nachricht an den PC im Serial Monitor erscheinen nur die Scrollbalken. Schick ich vom PC den Befehl 1 an den IC, passiert gar nichts.
Steck ich wieder den aller ersten IC rein, funktioniert wieder alles einwandfrei.
Es sind die gleichen IC's. Atmega328P-PU. Das einzige, was anders ist an der Beschriftung, sind die Zahlen darüber. Abe rich schätze, das ist was, wie die Seriennummer?

Ich hoffe, mir kann bei dem Problem jemand weiter helfen, ich fühl mich damit offen gestanden ein wenig überfordert.

LG

Fipsi

Edit:
Sketch vergessen...

int inByte = 0;
int blink = 0;
int ledState = LOW;
long previousMillis = 0;
long interval = 50;
char an_scheibe(3);


void setup ()
{
  Serial.begin(9600);
 
  pinMode(9, OUTPUT);
  digitalWrite(9, HIGH);
  
  pinMode(8, INPUT);           // set pin to input
  digitalWrite(8, HIGH);       // turn on pullup resistors
  delay(1000);
  digitalWrite(9, LOW);
}

void loop()
{
  if(digitalRead(8) == LOW)
  {
    Serial.print("gedrueckt\n");
    delay(400);
  }
 
  if (Serial.available())
  {
    inByte = Serial.read();
   
    if (inByte == '1')
    {
      Serial.print("Hallo ");
      Serial.println("Arduino-Nachbau");
   
      digitalWrite(9, HIGH);
      delay(500);
      digitalWrite(9, LOW);
      delay(500);
    }
  }
}

Der Sketch sieht OK aus, Dein Text ist - sorry - furchtbar.
Bootloader korrekt und die richtigen Fusebits gesetzt?

Ich verwende keinen Bootleader, ich hab nackte IC's und programmier über einen ISP.
An den Fusebits hab ich weder an den letzten beiden noch am ersten IC was verändert und wüsste ehrlich gsagt auch nicht, was ich da überhaupt machen müsste.

LG

Fipsi

du mußt die Fuses so setzen, wie beim ATMEGA, der auf dem Arduino verbaut war. Im Auslieferungszustand ist der 328 auf 8 MHz internen Takt gesetzt. Damit ist er langsamer und die Timings in den Programmen hauen logischerweise nicht mehr hin. Zum Zweiten ist der interne Oszillator nicht so frequenzstabil und es treten die beschriebenen Probleme an der seriellen Schnittstelle auf. Das ist in etwa so, als wenn 2 Leute Gleichschritt laufen sollen und einer rennt mal vor und mal bleibt er zurück :wink:
Mit Arduino Boardmitteln mußt du 1x den Bootloader brennen, damit die Fuses gesetzt werden. Du kannst aber auch mit Extremeburner oder ähnlichem gezielt die Fuses setzen. Pass aber auf, es gibt Möglichkeiten den Chip so zu verfusen, das du dich selber aussperrst ]:slight_smile:

Gruß Gerald

Hallo,

wenn ich den anderen Thread richtig im Kopf habe, hattest du doch Probleme bis zur Erfolgsmeldung den Bootloader zu brennen. Mit dem Bootloader werden die richtigen Fuses gesetzt. Also sind bei dem einen 328 die Fuses richtig gesetzt, beim neuen noch nicht.

Ouh man... dann kann ich natürlich lang rum probieren... facepalm.

Beim ersten war's Zufall, da hatte ich einfach irgendeine Aktion mitm ISP probiert. aber dass ich unbedingt den Bootleader erst brauch, wusste ich nicht. Dachte, den würde ich nur benötigen, wenn ich über nen USB-Konverter den Sketch hochladen will.

Vielen Dank

LG

Fipsi

Edit:

Theseus:
wenn ich den anderen Thread richtig im Kopf habe, hattest du doch Probleme bis zur Erfolgsmeldung den Bootloader zu brennen. Mit dem Bootloader werden die richtigen Fuses gesetzt. Also sind bei dem einen 328 die Fuses richtig gesetzt, beim neuen noch nicht.

Ich glaube, das was du meinst, war das Problem, dass der ISP nicht in der Programmer-Liste aufgeführt und somit nicht vom IDE angesprochen werden konnte.

Also wenn du einen Jingfräulichen 328er nutzt musst du vor dem ersten verwenden (vorrausgesetzt im Arduino Board oder sonst wo mit den externen 16Mhz) Burn Bootloader ausführen.
Dann werden die Fuses gesetzt! und der Bootloader aufgespielt.
Willst du weiter Arbeiten mit ISP und ohne Bootloader beim Upload einfach Upload mit Programmer machen und schon ist der Bootloader platt (Fuses bleiben erhalten).

Gruß
Der Dani

So ungefähr hab ich mir das jetzt auch zusammen gereimt, danke dir^^

LG

Fipsi

Wenn du immer mit ISP Programmer arbeiten willst, brauchst du natürlich keinen bootloader auf deine atmega328 zu brennen.
Die fuses musst du natürlich trotzdem verändern, wenn du 16 MHz externen Quarz verwenden willst.
Dafür gibt es in der Arduino - IDE keine fertige Funktion ( ausser als Nebeneffekt zu "Burn Bootloader" )

Aber dieser Beitrag fängt mit "Wenn" an.
Mein Tip: Brenn dir auf alle deine 328p einen bootloader und stell sie so auf "externen Takt". Dann brauchst du nicht zu überlegen, ob du sie "normal" aktualisieren kannst.

michael_x:
Aber dieser Beitrag fängt mit "Wenn" an.
Mein Tip: Brenn dir auf alle deine 328p einen bootloader und stell sie so auf "externen Takt". Dann brauchst du nicht zu überlegen, ob du sie "normal" aktualisieren kannst.

Also du meinst, ich soll dann mit dem USb-Konverter arbeiten?

LG

Fipsi

Also du meinst, ich soll dann mit dem USb-Konverter arbeiten?

Achso ja, du benutzt einen "normalen" Arduino eher selten, und hast die Wahl zwischen ISP Programmierer mit "upload using Programmer " oder USB Serial Konverter mit "upload".

Da du beide Möglichkeiten hast, probier aus, was dir eher liegt / flotter geht.

Eigentlich egal:

  • Die paar kB Platz für den bootlaoder solltest du haben
  • Dass der Reset ohne bootloader einen Tick schneller geht ist auch egal.
  • Wenn du den SerialUSB Konverter sowieso brauchst, warum nicht auch zum Laden verwenden.

Langfristig solltest du dich mit avrdude, fuses etc. vertraut machen :wink:

michael_x:

Also du meinst, ich soll dann mit dem USb-Konverter arbeiten?

Achso ja, du benutzt einen "normalen" Arduino eher selten, und hast die Wahl zwischen ISP Programmierer mit "upload using Programmer " oder USB Serial Konverter mit "upload".

Da du beide Möglichkeiten hast, probier aus, was dir eher liegt / flotter geht.

Eigentlich egal:

  • Die paar kB Platz für den bootlaoder solltest du haben
  • Dass der Reset ohne bootloader einen Tick schneller geht ist auch egal.
  • Wenn du den SerialUSB Konverter sowieso brauchst, warum nicht auch zum Laden verwenden.

Langfristig solltest du dich mit avrdude, fuses etc. vertraut machen :wink:

Den USb-Konverter brauch ich nicht sowieso. Momentan steckt er nur für die Spannungsversorgung dran und ab und zu auch RX/TX, wenn ich das Serial-Signal prüfe, ansonsten aber nur den Programmer benutze, bleibe ich jetzt mal vorerst bei dem.

Und letzteres werde ich dann machen, wenn ich mal den Nerv dafür hab... solangs funktioniert reicht mir erst mal des.. :smiley:

LG

Fipsi