Problem mit Pullups.Alle Pins reagieren anders
Ich hab da ein ganz blödes Problem mit meinem RN-Control 1.4 mit Mega 32. Ich will gerade diverse 1wire sensoren anschließen. Das ganze scheitert jetzt schon an folgendem Problem: Bei 1wire muss der Bus von einem Wiederstand (empfohlen 4,7k) auf 5V gezogen werden. Ich hab das Problem mal soweit isoliert das das wie folgt aussieht. Ich hab ein Programm geschrieben das einen beliebigen Pin auf Ausgang setzt und auf Low. jetzt schaltet das Programm den Pin als eingang und wartet bis er auf High pegel liegt. Die Zeit wird gestoppt. and den Entsprechenden Pin schließe ich ein 4,7k Wiederstand an und den an +5V. Wenn ich jetzt z.B. PINC 1 nehme dann ist der Pin innerhalb von ein paar us wieder auf 5V und alles ist gut. bei jedem anderen Pin des ganzen Controllers braucht das ganze mehrere ms was definitiv zu langsam ist. PINC1 wird ja auch für i2c benutzt und is bei rncontrol ja mit nem pullup schon verbunden. Dachte zuerst daran liegts aber der is 1. 10k und 2. funktionierts an pin c2 der ja genau so beschaltet ist auch nicht. Ich hab schon überprüft nur Pins zu nehemen die nicht noch intern beim rncontrol beschaltet sind zu benutzen etc. etc. aber ich kriegs nicht hin. Woran kann das liegen? 4,7k ist doch als pullup nicht zu groß oder? bei PinC1 geht das ganze ja auch. Sind die kapazitäten der i/o Pins so unterschiedlich?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
habe mal zur Hand genommen was da war. Atmega 16 @ 16 Mhz
Obere Kurve PD5 untere PD 7 mit 4,7K Pullup.
Wie man auf dem Bild vielleicht erahnen kann ist eine Zeiteinteilung von 1µs/div gewählt.
Code:
#include <avr/io.h>
#define NOP asm("nop")
int main (){
DDRD |= (1<<PD5);
while (1)
{
PORTD |= (1<<PD5); //a
DDRD |= (1<<PD7);
PORTD &= ~(1<<PD7); //b
DDRD &= ~(1<<PD7); //c
NOP;
NOP;
PORTD &= ~(1<<PD5); //d
}
return 0;
}
Das ist etwa das was ich erwartet habe. Ein weiter Test bei dem nicht die Pegeländerung am Beinchen, sondern der interne Zustand des PIN's auf einen anderen Ausgang gelenkt wurde, bestätigt, dass was zerush geschrieben hat. Darum Code und Messverfahren posten.
@zerush Wobei das Problem ja darin besteht, dass der Übergang von Ein- auf Ausgang auffällig lange dauert. Erst durch den Übergang wird eine Pegeländerung des PIN's hervorgerufen, die dann sicher auch beim OP schnell genug erkannt wird.
Gruß
Jens