ich bin neu relativ im Thema Mikorocontroller.
Ich habe vorher immer mit Adruino Nanos experimentiert.
Jetzt wollte ich das ganze mal auf eine Eigene Platine bringen,
nur leider kriege ich gar keine Kommunikation zum ATMega aufgebaut.
Hätte jemand ein paar Ratschläge?
Leider habe ich keinen Kumpel der sich in dem Gebiet auskennen könnte.
Anbei ein Foto der Schaltung sowie ein Foto vom Testaufbau.
Nach dem Kompilieren, passiert gar nicht bei der Übertragung und dann geht der nach einer gewissen zeit in den Timeout.
Habe ich ein Grundlegendes Problem im Aufbau oder ist es mein USB-TTL Adapter der Probleme machen könnte?
Danke im Voraus
//input
int DIP1=2;
int DIP2=3;
int DIP3=4;
int DIP4=5;
int buttonStart=6;
int buttonRelease=7;
int special=8;
int Res_2=9;
//output
int relais1=11;
int relais2=12;
//static
int time1;
int time2;
int time3;
int time4;
int flashtime;
void setup() {
// input
pinMode(DIP1, INPUT);
pinMode(DIP2, INPUT);
pinMode(DIP3, INPUT);
pinMode(DIP4, INPUT);
pinMode(buttonStart, INPUT);
pinMode(buttonRelease, INPUT);
pinMode(special, INPUT);
pinMode(Res_2, INPUT);
//output
pinMode(relais1, OUTPUT);
pinMode(relais2, OUTPUT);
}
void loop() {
// Zeiten einstellung der Variable zuweisen
if ((digitalRead(DIP1)==LOW)){
time1 = 50;
}
if ((digitalRead(DIP1)==HIGH)){
time1 = 0;
}
if ((digitalRead(DIP2)==LOW)){
time2 = 50;
}
if ((digitalRead(DIP2)==HIGH)){
time2 = 0;
}
if ((digitalRead(DIP3)==LOW)){
time3 = 25;
}
if ((digitalRead(DIP3)==HIGH)){
time3 = 0;
}
if ((digitalRead(DIP4)==LOW)){
time4 = 25;
}
if ((digitalRead(DIP4)==HIGH)){
time4 = 0;
}
//Zeit akkumulieren
flashtime = time1 + time2 + time3 + time4;
if((digitalRead(buttonRelease)==LOW) and (digitalRead(buttonStart)==LOW) and (digitalRead(buttonStart)==HIGH) and flashtime > 0){
for (int i=0; i<6; i=i+1){
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
delay(flashtime);
digitalWrite(relais1, LOW);
digitalWrite(relais2, LOW);
delay(flashtime);
};
}
if((digitalRead(buttonRelease)==LOW) and (digitalRead(buttonStart)==LOW) and (digitalRead(buttonStart)==LOW) and flashtime > 0){
for (int i=0; i<6; i=i+1){
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
delay(flashtime);
digitalWrite(relais1, LOW);
digitalWrite(relais2, LOW);
delay(flashtime);
};
delay(flashtime + 50);
for (int i=0; i<6; i=i+1){
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
delay(flashtime);
digitalWrite(relais1, LOW);
digitalWrite(relais2, LOW);
delay(flashtime);
};
}
}
Doch das geht.
Nimm dein Schaltbild und zeige es als Foto. Wir brauchen das, damit wir erkennen können, wie du alles angeschlossen hast. Auch ein Foto von deinem Aufbau wäre super.
Prima, das ist ok.
Die Verbindung des USB Adapters zum Board ist schwer zu erkennen.
Hast du RX und TX gekreutzt ?
Und hast du du einen Bootloader auf dem Atmega drauf ?
Zudem fehlen 100 nF Kondensatoren an den Spannungspins direkt am Atmega.
and (digitalRead(buttonStart)==LOW) and (digitalRead(buttonStart)==HIGH)
buttonStart kann nicht gleichzeitig LOW und HIGH sein, auch wenn es nur Mikrosekunden auseinander liegt (es sei denn, in sehr seltenen Situationen, in denen man sehr viel Glück haben müsste und die Messungen genau kurz vor und nach dem Zustandswechsel stattfinden).
Warum überprüfen Sie den buttonStart Pin zweimal hintereinander?
Okay dann ist es auch der Bootloader schuld.
Den kriege ich nicht über ArduinoIDE drauf, oder gibt es da andere möglichkeiten
den auf den ATMega zu bekommen?
Okay das mit den 100nF habe ich dann falsch gemacht.
Danke für die Info.
Die Programmfehler sind eben beim Umkopieren passiert, da ich aus verzweiflung das Programm kleiner gemacht habe, abgeändert habe.
Aber danke für den Hinweis. Im Ausgangsprogramm sind die Fehler nicht vorhanden.
Okay, danke.
Damit ist mit schon ordentlich geholfen.
Dann bestelle ich mir ein einen Nano, um das zu versuchen.
Und werde mit die Komponenten mal neu Bestellen um es als Testaufbau nochmal zu versuchen.
Geht das mit dem Bootloader nicht auch mit dem Atmel Studio (jetzt Microchip)?
Adafruit hat da mal was geschrieben... ich habe es aber nie ausprobiert.
DTR geht an Reset vom µC, der Pin fehlt Dir leider. Geübte Menschen können Reset im richtigen Moment auf GND legen, dann kommt der µC in den Bootloader. Eventuell schaffst Du das.
Alternativ wenn der richtige Bootlaoder (für 20Mhz) drauf ist, kannst Du auch manuell resetieren. Das ist keine Hexerei. Einfach Resettaster drücken und gedrückt halten. Upload in der IDE starten. Resettaster loslassen sobald die Kompilierung fertig ist und Uplaod in der IDE untere Zeile erscheint. Eventuell mit Blink Beispiel Sketch versuchen.
Standart für Arduino sind 16 bzw 8 Mhz Quarz und der Bootloader muß darauf angepaßt sein.
Statt einen Controller auf die Platine zu löten bevorzuge ich einen Arduino MINI ( eventuel Nachbau) auf die Platine zu löten. Eventuel ist ein NANO V3.0 auch eine mögliche Wahl.
Du hast da 2 Relais auf der Platine aber keine Freilaufdioden. Die solltest du zeitnah nachrüsten da sonst die Freude über einen funktionierenden Bootloader recht kurz wird.
Tipp zum Zeichen eines Schaltplanes: Dein GND ist eine "wunderbare Schlange".
Wenn du + oben hast und GND unten ist der Plan viel besser lesbar.
Und wenn dann noch die Eingänge links und die Ausgänge rechts sind, wird es noch besser