Spannung von 1,12 Volt an PD0 und PD1 nach Programmdurchlauf

OP #1936785
Lesenswert?
• ▲
▼
hallo zusammen,

ein kleines problem und zwar:

habe einen atmega8L-8PU. wenn ich diesen an spannung lege, habe ich an 
PD0 und an PD1 eine spannung von 0,00 V. sobald ich jedoch an einen der 
pins spannung lege, und somit einen programmablauf starte, hat der 
entsprechende pin von diesem moment an 1,12 V, und der geht auch erst 
nach einem reset wieder auf 0,00 V. An beiden I/O pins ist jeweils ein 
10k nach masse geschalten. eingangsseitig am pin ist ein 47k widerstand, 
da die eingangsspannung ca. 12 V beträgt. auch wenn ich die 
eingangsspannung an diesen pins komplett wegnehme, bleibt die spannung 
bei unerklärlichen 1,12 volt. ich kann mir nicht erklären, warum? 
interne pullup widerstände aktiviere ich zu keiner zeit in meinem code 
für PD0 oder PD1.

kann das sein dass genau diese RXD und TXD pins hier dazwischenfunken, 
und noch speziell als I/O pins konfiguriert werden müssen? da ja ich PD0 
und PD1 als eingänge verwende, habe ich mit DDRD... auch nichts 
konfiguriert. abgefragt werden die eingänge nicht mit PORT, sondern mit 
PIN. daran kanns also auch nicht liegen dass sich da was verändert...

hier die funktion, die PD1 abfragt:
1
int status_p(void)
2
{
3
  uint16_t warten = 1; // Anzahl Schleifendurchläufe * ms = Gesamtdauer
4
 
5
  while( (PIND & (1<<PIND1)) && (warten != 0) ) // Solange Eingangssignal erkannt
6
  {
7
    _delay_ms(25);
8
    warten--;
9
  }
10

11
  // Signal immer noch vorhanden UND Zeit abgelaufen? (sonst fehlen 25ms)
12
  if ( (PIND & (1<<PIND1)) && (warten == 0) )
13
    return 1;
14
  else
15
    return 0;
16
}

hier die funktion, die PD0 abfragt:
1
int status_l(void)
2
{
3
  uint16_t warten = 4; // Anzahl Schleifendurchläufe * ms = Gesamtdauer
4
 
5
  while( (PIND & (1<<PIND0)) && (warten != 0) ) // Solange Eingangssignal erkannt
6
  {
7
    _delay_ms(25);
8
    warten--;
9
  }
10

11
  // Signal immer noch vorhanden UND Zeit abgelaufen? (sonst fehlen 25ms)
12
  if ( (PIND & (1<<PIND0)) && (warten == 0) )
13
    return 1;
14
  else
15
    return 0;
16
}

hier meine ausgänge:
1
DDRC |= (1<<PC0);
2
DDRC |= (1<<PC1); 
3
DDRD |= (1<<PD2); 
4
DDRD |= (1<<PD3); 
5
DDRD |= (1<<PD4);

hier der code, in dem die funktionen aufgerufen werden:
1
    do
2
    {      
3
      _delay_ms(25); // Warten
4

5
      PORTD = PIND ^ (1<<PIND4); // Betriebs LED blinken lassen (Status invertieren)
6

7
      warten--; // Runterzählen, und nach 20 Sekunden (800 Durchläufe) Vorgang abbrechen
8

9
    // Vorgang abbrechen, wenn...
10
    }while( status_p() && !status_l() && warten != 0 );

jemand ne idee, wie ich PD0 und PD1 wieder "anständig" auf 0,00 V 
bekomme, wenn kein Eingangssignal anliegt? Es kam nämlich schon vor, 
dass diese 1,12 Volt fälschlicherweise als High-Pegel registriert 
wurden, und das Programm unverhofft startete.

Danke

Christian

:-)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.