xmega pin als Eingang

OP #2975306
Lesenswert?

Guten Morgen,

folgdendes Problem mit xmega128a1: Bei Systemstart soll ein Pin 
eingelesen werden um je nach Pegel ein Display anders initialieseren.
1
int main(void)
2
{
3
 PORTB_DIRCLR = PIN1_bm;    // Pin als Input
4
 PORTB.PIN1CTRL = PORT_OPC_PULLUP_gc;  // interner PullUp PortB Pin1
5
 
6

7
 if (PORTB.IN & (1<<1)) LED0_ON(); else LED0_OF();
8

9
 ...
10
}

Das merkwürdige daran ist das manchmal beim starten der Pin falsch 
eingelesen wird.
Dh. der interne Pullup wird irgendwie nicht richtig gesetzt oder so.

Oder mache ich was falsch?

Danke, Markus
Gast #2976471
Lesenswert?

Moin,

wenn der Jumper gesteckt ist, dann ist der Port-Pin niederohmig an Masse 
angelegt - da sollte nichts passieren.
Ist der Jumper offen, dann passiert folgendes: Der Prozessor startet, 
der Port-Pin floatet (hat undefiniertes Potential), auf "Eingang" 
schalten ist in diesem Fall eigentlich nicht notwendig (ist Default), 
dann wird der Pull-Up eingeschaltet. Da der relativ hochohmig ist, kann 
es eine Zeit lang dauern, bis der Port-Pin wirklich auf VCC "aufgeladen" 
ist. Deshalb funktionierts auch mit einem Delay.... Die Kapazitäten sind 
parasitärer Natur - d.h. Leiterplatte, Gehäuse-Pins etc.

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