Hallo Zusammen Ich habe mal wieder ein Problem und erhoffe mir den einen oder anderen Input, um es zu lösen... Ein Atmega 2560 hat an einem Pin (PC7) nur 1.4V anstatt 5V, wenn der Ausgang auf high geschaltet wird. Die anderen Pins am Port C machen was sie sollen... Ich habe mal alles abgehängt und mit dem Multimeter den Widerstand zu den benachbarten Pins gemessen, alles im MOhm Bereich. Hat jemand eine Idee an was das liegen könnte, dass da nur 1.3V rauskommen?? Vielen Dank schon im Voraus. Gruss Chrys
chrys schrieb: > Ein Atmega 2560 hat an einem Pin (PC7) nur 1.4V anstatt 5V, wenn der > Ausgang auf high geschaltet wird. Vielleicht weil du den Pin nicht als Ausgang konfiguriert hast?
ist AVcc angeschlossen? Ansonsten Beinchen hochbiegen, falls gesockelt und noch Mal messen
Walter S. schrieb: > Ansonsten Beinchen hochbiegen, falls gesockelt Es dürfte schwierig sein einen ATMega2560 im THT zu bekommen. Der Verdacht liegt sowieso nahe dass es sich um einen Arduino Mega2560 handelt, dann ist AVcc sicherlich angeschlossen.
Arduinoquäler schrieb: > Vielleicht weil du den Pin nicht als Ausgang konfiguriert hast? Doch habe ich :) Walter S. schrieb: > ist AVcc angeschlossen? Ja Walter S. schrieb: > Ansonsten Beinchen hochbiegen, falls gesockelt und noch Mal messen Ist nicht gesockelt...
Arduinoquäler schrieb: > Der Verdacht liegt sowieso nahe dass es sich um einen Arduino > Mega2560 handelt, dann ist AVcc sicherlich angeschlossen. Ist kein Arduino... aber es ist der Erste, den ich verlötet habe ;)
chrys schrieb: > aber es ist der Erste, den ich verlötet habe ;) Zeig bitte mal den Schaltplan. Und am besten noch ein Foto von der Platine.
Frank M. schrieb: > Zeig bitte mal den Schaltplan. Und am besten noch ein Foto von der > Platine. Schaltung ist angehängt (ich hoffe Screenshot ist in Ordnung) und Foto kommt gleich...
chrys schrieb: > Doch habe ich :) Zeigst du uns die Zeile in der du das gemacht hast? Bist du sicher dass du diese Zeile nicht durch einen späteren Konfigurations-Schreibvorgang auf diesen Port wieder zunichte machst? (einfach mal suchen nach DDRC...) Oder zeig uns gleich deine "ganze" Software.
Hier mal die Platine, der Quarz sitzt auf der Rückseite...
chrys schrieb: > Schaltung ist angehängt Schaut funktionell ganz vernünfig aus bis auf C19 und C20 die "seltsame" Werte haben. (vom Anblick her allerdings ist noch Verbesserungspotential vorhanden)
Arduinoquäler schrieb: > Zeigst du uns die Zeile in der du das gemacht hast? //Motor 13 ddrIN1_13 |= (1<<IN1_13); //output ddrIN2_13 |= (1<<IN2_13); //output ddrEN_13 |= (1<<EN_13); //output ddrOCD_13 &= ~ (1<<OCD_13); //input (no pullup) portIN1_13 &= ~(1<<IN1_13); //set IN1 low portIN2_13 &= ~(1<<IN2_13); //set IN2 low portEN_13 &= ~(1<<EN_13); //set EN low Arduinoquäler schrieb: > Bist du sicher dass du diese Zeile nicht durch einen > späteren Konfigurations-Schreibvorgang auf diesen Port > wieder zunichte machst? > > (einfach mal suchen nach DDRC...) Ja, ziemlich, war auch mein erster Gedanke. Aber wieso 1.3V??
Hast Du nach dem löten auch alle Pins auf Verbindung mit ihren Nachbarn getestet?
hp-freund schrieb: > Hast Du nach dem löten auch alle Pins auf Verbindung mit ihren Nachbarn > getestet? Ja, wie gesagt im MOhm Bereich
chrys schrieb: > //Motor 13 > ddrIN1_13 |= (1<<IN1_13); //output > ddrIN2_13 |= (1<<IN2_13); //output > ddrEN_13 |= (1<<EN_13); //output > ddrOCD_13 &= ~ (1<<OCD_13); //input (no pullup) > portIN1_13 &= ~(1<<IN1_13); //set IN1 low > portIN2_13 &= ~(1<<IN2_13); //set IN2 low > portEN_13 &= ~(1<<EN_13); //set EN low Also ich kann da keinen Port C (bzw DDRC) erkennen. Du wolltest ja PC7 (Port C, Bit 7) als Output konfigurieren.
spess53 schrieb: > Wo ist in deinem Schaltplan PIN61 - VCC? Der hat bei dem Teil vom KiCad gefehlt, habe ihn aber Nachträglich reingepackt (Foto)... Aber huren scharfer Blick!!
Zur Leiterplatte... sportlich mit diesen Breiten und Abstanden selbst zu aetzen. Ich haett erst mal einen Schluss zwischen Pins vermutet.
Arduinoquäler schrieb: > Also ich kann da keinen Port C (bzw DDRC) erkennen. > Du wolltest ja PC7 (Port C, Bit 7) als Output konfigurieren. //Motor 13 #define IN2_13 PJ0 //ATMega Pin: 63 Stiftleiste2:16 #define IN1_13 PB4 //ATMega Pin: 23 Stiftleiste2:15 OC2A #define EN_13 PC7 //ATMega Pin: 60 Stiftleiste2:14 #define OCD_13 PC6 //ATMega Pin: 59 Stiftleiste2:13 #define portIN2_13 PORTJ #define portIN1_13 PORTB #define portEN_13 PORTC #define portOCD_13 PORTC #define ddrIN2_13 DDRJ #define ddrIN1_13 DDRB #define ddrEN_13 DDRC #define ddrOCD_13 DDRC Und dann im main: portEN_13 |= (1<<EN_13); // Ich denke der Code ist in Ordnung, weil wie sollte ich da 1.3V produzieren?
Oh D. schrieb: > Ich haett erst mal einen Schluss zwischen Pins vermutet. Ich auch, habe bis jetzt aber nichts gefunden...
chrys schrieb: > spess53 schrieb: >> Wo ist in deinem Schaltplan PIN61 - VCC? > > Der hat bei dem Teil vom KiCad gefehlt, habe ihn aber Nachträglich > reingepackt (Foto)... Aber huren scharfer Blick!! Interessanterweise ist PC7 auf Pin60, also direkt daneben.
chrys schrieb: > Hier mal die Platine, der Quarz sitzt auf der Rückseite... hmmmm.... gehört jetzt nicht ganz zum Thema dieses Threads, aber ..... Ich finde es schon sehr mutig ohne Längswiderstände vom Prozessor auf eine Peripherie zu gehen, aus zwei Gründen: 1) Längswiderstände begrenzen den Strom der in einem Fehlerfall (bei so vielen Leitungen geht das schneller als man denkt und der Prozessor ist hin) fliessen könnte. 2) Längswiderstände sorgen dir dafür dass (die bei einer gewissen Leitungslänge) auftretende Reflexionen vom Leitungsende nicht die Signalflanke stören.
Frank M. schrieb: > Interessanterweise ist PC7 auf Pin60, also direkt daneben. Jop, deshalb auch schon tausendmal den Widerstand zwischen den Beiden gemessen (2.8MOhm)
chrys schrieb: > Und dann im main: portEN_13 |= (1<<EN_13); // Müsste eigentlich heissen ddrEN_133 |= (1<<EN_13); // um den Pin als Output zu konfigurieren?
Arduinoquäler schrieb: > hmmmm.... gehört jetzt nicht ganz zum Thema dieses Threads, > aber ..... Nehmt sie ruhig auseinander :) man kann nie genug lernen! Arduinoquäler schrieb: > Ich finde es schon sehr mutig ohne Längswiderstände vom > Prozessor auf eine Peripherie zu gehen, aus zwei Gründen: > 1) Längswiderstände begrenzen den Strom der in einem > Fehlerfall (bei so vielen Leitungen geht das schneller als > man denkt und der Prozessor ist hin) fliessen könnte. Der Schluss könnte ja auch vor den Widerständen passieren... Du würdest also bei jedem Output einen Widerstand reinpacken? Welcher Wert?
chrys schrieb: > //Motor 13 > ddrIN1_13 |= (1<<IN1_13); //output > ddrIN2_13 |= (1<<IN2_13); //output > ddrEN_13 |= (1<<EN_13); //output Hab ich ja, wollte nur zeigen, dass ich den Output auch noch high setzte :)
chrys schrieb: > Der Schluss könnte ja auch vor den Widerständen passieren... Die Platine wird ja für sich erst mal geprüft und ist dann in Ordnung. Soviel Voraussetzung muss sein. Der Kurzschluss passiert dann beim Anstecken oder beim testen des komplexen Gebildes. chrys schrieb: > Du würdest also bei jedem Output einen Widerstand reinpacken? Ja. chrys schrieb: > Welcher Wert? Den kann sich jeder für seine Anforderung selbst ausdenken. Dazu gibt es auch überall kluge Vorschläge.
Suche doch mal bei allen benachbarten Leiterbahnen auf der Platine im Betrieb auch die 1,3V.
Ein kleines Testprogramm das nur PC7 schaltet könnte zeigen ob der noch in Ordnung ist.
Nachdem bisher alle Lösungsvorschläge fehlschlugen fällt mir noch ein dass durch einen Ätzfehler ein Mini-Kurzschluss (dünne Kupferbrücke, Restkupfer) auf dem langen Leitungsverlauf zu einer Nachbarleitung vorhanden sein könnte. Ist mir auch bei professionellen Leiterplattenherstellern schon passiert. Ist zwar durch "Nachbar-Pins auf gleichem Pegel?" schon weitgehend abgedeckt, aber vielleicht gibt es andere Nachbar- Leitungen? Das Spacing zwischen den Leitungen ist jedenfalls ein bisschen verdächtig.
Joe schrieb: > Suche doch mal bei allen benachbarten Leiterbahnen auf der Platine im > Betrieb auch die 1,3V. hp-freund schrieb: > Ein kleines Testprogramm das nur PC7 schaltet könnte zeigen ob der noch > in Ordnung ist. Ich habe mal nur PC7 als output (high). An PC7 liegen nachwievor die 1.3V an PC6 messe ich 50 mV aber!! an PC5 messe ich 2.5V????????????? sonst alle anderen in der Nähe liegen zwischen 50 und 120 mV... Irgend etwas ist schon faul, komm aber gerade gar nicht klar mit dieser Situation :)
Mach mal 'nen Diodentest des Pin nach VCC und GND. Wenn der defekt ist, geht auch meistens einer der Tests nicht mehr. Strom darf dabei natürlich nicht am µC anliegen!
Jim M. schrieb: > Mach mal 'nen Diodentest des Pin nach VCC und GND. Meinst du, das Multimeter auf Diodentest schalten und dann vom Pin nach Vcc und Gnd? PC7 = 600-700 mV in beide Richtungen und PC5 80-100mV?
PC5 hat nur 80 Ohm nach GND, habe aber nirgends eine kritische Stelle auf der Platine entdeckt, da der auch weitgehend nie an GND vorbeikommt... Ist der Defekt? Wenn ja, wieso? Habe PC5 nur als Input benuzt, der sollte also nie zu viel Strom abgekriegt haben.
chrys schrieb: > Habe PC5 nur als Input benuzt, der > sollte also nie zu viel Strom abgekriegt haben. Bei Spannungsspitzen (Induktionspannungen) schon. Arduinoquäler schrieb: > Ich finde es schon sehr mutig ohne Längswiderstände vom > Prozessor auf eine Peripherie zu gehen, aus zwei Gründen: > ........ Spannungsspitzen würden auch gemässigt auf den Prozessor einwirken wenn man Längswiderstände vorsieht.
chrys schrieb: > Wenn ja, wieso? Wohl doch schon mal mit der Peripherie gespielt bevor die Controller-Platine alleine ausgetestet war?
Hi >>Arduinoquäler schrieb: >> Ich finde es schon sehr mutig ohne Längswiderstände vom >> Prozessor auf eine Peripherie zu gehen, aus zwei Gründen: >> ........ >Spannungsspitzen würden auch gemässigt auf den Prozessor >einwirken wenn man Längswiderstände vorsieht. Man kann es auch übertreiben. Ich arbeite seit über 15 Jahren mit dem STK500, das auch keine Längswiderstände besitzt, recht unfallfrei. MfG Spess
Arduinoquäler schrieb: > Wohl doch schon mal mit der Peripherie gespielt bevor die > Controller-Platine alleine ausgetestet war? jaja :) die Hoffnung stirbt zuletzt, aber wenn sie stirbt ist halt scheisse... In der Leistungsplatine war ein Fehler, jetzt ist es halt nur noch ein 14 Achs Controller und nicht mehr 15 ;)
spess53 schrieb: > Ich arbeite seit über 15 Jahren mit dem > STK500, das auch keine Längswiderstände besitzt, recht unfallfrei. Man kann von sich auf andere schliessen, muss man aber nicht. Indirekt und vorsichtig ausgedrückt. spess53 schrieb: > recht unfallfrei Sehr abhängig von dem was und wie man es macht.
Vielen Dank trotzdem für die rege Beteiligung!! Einmal mehr haut mich das Forum um bezüglich Anzahl, Geschwindigkeit und natürlich auch Kompetenz der Antworten!! Gruss Chrys
chrys schrieb: > In der Leistungsplatine war ein Fehler, jetzt ist es halt > nur noch ein 14 Achs Controller und nicht mehr 15 ;) Man muss das Positive daran sehen: Jetzt kannst du dich darin auszeichnen einen TQFP144 Chip abzulöten ohne die Lötpads der Platine abzureissen / zu zerstören. Oder du machst gleich ein neues Layout schööööön mit SMD- Teilen und Schutzwiderständen für den Controller.
Arduinoquäler schrieb: > 2) Längswiderstände sorgen dir dafür dass (die bei einer > gewissen Leitungslänge) auftretende Reflexionen vom > Leitungsende nicht die Signalflanke stören. Wenn du das noch nicht verinnerlicht hast ist es um so mehr angebracht jetzt darüber genauer nachzudenken. Auch über das neue Layout. .... aber ich kenne nicht die Länge deiner Leitungen die daran hängen und wie die Last sonst aussieht ....
Arduinoquäler schrieb: > Jetzt kannst du dich darin auszeichnen einen TQFP144 Chip > abzulöten ohne die Lötpads der Platine abzureissen / zu > zerstören. Ist nur ein 100er, und sollte das mit einem Heissluftföhn nicht problemlos gehen, habs noch nie gemacht? Arduinoquäler schrieb: > Oder du machst gleich ein neues Layout schööööön mit SMD- > Teilen und Schutzwiderständen für den Controller. Die war eigentlich nur zum testen ob mein Layout 15 (jetzt halt nur 14) DC-Motoren verträgt und ob der AVR 15 PID controller mit 2kHz schafft. Aber eigentlich nehme ich absichtlich so wenig SMD wie möglich und ich denke die Längswiderstände werde ich auch weglassen, weil wenns mal funktioniert, funktionierts auch ohne und ich löte nicht alle Tage einen L6206 verkehrt rum rein :) Aber danke für den Tipp! Gruss Chrys
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.