Atmega 2560 zu wenig Spannung am Ausgang

Gast #4800960
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
Gast #4800990
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.
Gast #4800999
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??
Gast #4801013
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.
Gast #4801022
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?
Gast #4801031
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.
Gast #4801043
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?
Gast #4801045
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.
Gast #4801058
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.
Gast #4801109
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 :)
Gast #4801152
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.
Gast #4801176
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.
Gast #4801207
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
Gast #4801216
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 ;)
Gast #4801229
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.
Gast #4801233
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 ....
Gast #4801234
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren