Forum: Mikrocontroller und Digitale Elektronik Atmega 2560 zu wenig Spannung am Ausgang


von chrys (Gast)


Lesenswert?

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

von Arduinoquäler (Gast)


Lesenswert?

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?

von Walter S. (avatar)


Lesenswert?

ist AVcc angeschlossen?

Ansonsten Beinchen hochbiegen, falls gesockelt und noch Mal messen

von Arduinoquäler (Gast)


Lesenswert?

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.

von chrys (Gast)


Lesenswert?

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...

von chrys (Gast)


Lesenswert?

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 ;)

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

von chrys (Gast)


Angehängte Dateien:

Lesenswert?

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...

von Arduinoquäler (Gast)


Lesenswert?

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.

von chrys (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal die Platine, der Quarz sitzt auf der Rückseite...

von Arduinoquäler (Gast)


Lesenswert?

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)

von chrys (Gast)


Lesenswert?

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??

von hp-freund (Gast)


Lesenswert?

Hast Du nach dem löten auch alle Pins auf Verbindung mit ihren Nachbarn 
getestet?

von chrys (Gast)


Lesenswert?

Arduinoquäler schrieb:
> C19 und C20 die
> "seltsame" Werte haben.

22pF

von chrys (Gast)


Lesenswert?

hp-freund schrieb:
> Hast Du nach dem löten auch alle Pins auf Verbindung mit ihren Nachbarn
> getestet?

Ja, wie gesagt im MOhm Bereich

von spess53 (Gast)


Lesenswert?

Hi

Wo ist in deinem Schaltplan PIN61 - VCC?

MfG Spess

von Arduinoquäler (Gast)


Lesenswert?

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.

von chrys (Gast)


Lesenswert?

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!!

von Pandur S. (jetztnicht)


Lesenswert?

Zur Leiterplatte... sportlich mit diesen Breiten und Abstanden selbst zu 
aetzen. Ich haett erst mal einen Schluss zwischen Pins vermutet.

von chrys (Gast)


Lesenswert?

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?

von chrys (Gast)


Lesenswert?

Oh D. schrieb:
> Ich haett erst mal einen Schluss zwischen Pins vermutet.

Ich auch, habe bis jetzt aber nichts gefunden...

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

von Arduinoquäler (Gast)


Lesenswert?

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.

von chrys (Gast)


Lesenswert?

Frank M. schrieb:
> Interessanterweise ist PC7 auf Pin60, also direkt daneben.

Jop, deshalb auch schon tausendmal den Widerstand zwischen den Beiden 
gemessen (2.8MOhm)

von Arduinoquäler (Gast)


Lesenswert?

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?

von chrys (Gast)


Lesenswert?

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?

von chrys (Gast)


Lesenswert?

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 
:)

von Arduinoquäler (Gast)


Lesenswert?

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.

von Joe (Gast)


Lesenswert?

Suche doch mal bei allen benachbarten Leiterbahnen auf der Platine im 
Betrieb auch die 1,3V.

von hp-freund (Gast)


Lesenswert?

Ein kleines Testprogramm das nur PC7 schaltet könnte zeigen ob der noch 
in Ordnung ist.

von Arduinoquäler (Gast)


Lesenswert?

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.

von chrys (Gast)


Lesenswert?

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 :)

von hp-freund (Gast)


Lesenswert?

PortC R.I.P.

von Jim M. (turboj)


Lesenswert?

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!

von chrys (Gast)


Lesenswert?

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?

von chrys (Gast)


Lesenswert?

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.

von Arduinoquäler (Gast)


Lesenswert?

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.

von Arduinoquäler (Gast)


Lesenswert?

chrys schrieb:
> Wenn ja, wieso?

Wohl doch schon mal mit der Peripherie gespielt bevor die
Controller-Platine alleine ausgetestet war?

von spess53 (Gast)


Lesenswert?

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

von chrys (Gast)


Lesenswert?

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 ;)

von Arduinoquäler (Gast)


Lesenswert?

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.

von chrys (Gast)


Lesenswert?

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

von Arduinoquäler (Gast)


Lesenswert?

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.

von Arduinoquäler (Gast)


Lesenswert?

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 ....

von chrys (Gast)


Lesenswert?

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