c167: Schleifenbedingung

Gast #1137584
Lesenswert?

Hallo,

habe an den Pin5.8 des uC167cs, einen Schalter angebracht(schaltet 
normaloff).
Wenn der schalter betätigt wird soll in diese Schleife eingsprungen 
werden.

if(PMenue) // PMenue = P5^8; PMenue =0;
{
...
...
}

Das Prob ist jedoch, daß diese schleife immer als war erkannt wird.
Hab ich da was vergessen zu setzen?? den der Port5 könnte auch als 
AN-Port verwendet werden und ist ein Eingang??

Danke
Gast #1137727
Lesenswert?

Hi Jörg,

war ein Tip-Fehler meinerseits, ich meine natürlich:
sbit PMenue = P5^8;
PMenue = 0;

Der Schalter ist vollgendemasen verdratet: c = +5V und no an PIN5.8.

 _/___ P5^8
|
+5V

Ich gucke somit ob an pin 5.8 +5V anliegen oder nicht, ist nicht somit
PMenue = 1; bzw PMenue = P5&0x0000; nicht korrekt??
Gast #1137737
Lesenswert?

Was will ich damit??

Wil den Taster als Menue eingang benutzen.
Wird ein High-Pegel an diesen Port erkannt soll in eine Menue Routine 
gesprungen werden.

Der Taster soll in einer Endlosschleife immer Wieder abfragen.
Gast #1137750
Lesenswert?

Ich glaube es wäre besser P5.8 mit ca. 4k7 an +5V hängen und dann mit 
dem Schalter gegen Masse schalten. Gibt dann zwar einen 0 bei Schalter 
EIN, sollte aber kein Problem sein. Du brauchst vernüftige Pegel am 
Port.
#1137758
Lesenswert?

P5_P8 müsst in deinem include-file c167.h schon als P5^8 definiert sein, 
du kannst also P5_P8 direkt abfragen.
(edit: da steht "sbit P5_P8 = P5^8;" drin)

also
1
#define PMenue P5_P8
2

3
if (PMenue) {
4
...
5
}

Allerdings fehlt dir in deinem Mini-Schaltplan noch ein Pull-down 
Widerstand für einen definierten Pegel, falls der Schalter offen ist!

Die C16x haben meines Wissen keine internen Pull-Up/Down Widerstände, 
erst die XC2000 Familie...
Gast #1137771
Lesenswert?

mit P5^8; kann ich explizeit den Port ansprechen und ja er ist im 
include-file c167.h definiert.
Hab mir das irgenwie einfacher vorgestellt.
Ist das nicht so das wenn ich den port5.8 auf hight/low setze ich einen 
hohen/kleinen wiederstand am port habe?? und somit den schalter einfach 
an den Port hängen kann??
Gast #1137782
Lesenswert?

einen wiederstand zu was?

du ahst einen internen pull up wiederstand an 5V.
hängt nichts am pin, und du liest diesen, wirst du ne 1 lesen...
ziehst du den pin extern auf Masse, wirst du eine 0 lesen...

wofür man da allenfalls wie oben geschrieben externe widerstände 
brauchen soll, ist mir schleierhaft, würde dem sinn interner pull-ups 
widersprechen...

sehe das problem nicht...
sind die pins richtig konfiguriert? (Dave wär ein gemütliches tool für 
den anfang...)
Moderator (Firma: Titel) Persönliche Seite #1137869
Lesenswert?

> Domian, hab nur den Port5 auf low gesetzt: P5 = 0x0000;
Du kannst auf den P5 auch dein Geburtsdatum schreiben, das wird nichts 
ändern. Nochmal langsam zum mitlesen:
Es gibt kein Ausgangsregister und keine Pulldowns oder Pullups für P5
Mach einen externen 10k Pulldown an den Pin.

> compiler Keil.
Na gut, böses C-Derivat.
Da solltest du deinen Portpin so definieren:
1
sbit PMenue = P5^8;
Diese Compilererweiterung ist übrigens was ganz anderes als wenn du 
schreibst:
1
PMenue = P5^8;
das sbit macht den Unterschied.
Gast #1140465
Lesenswert?

also mit dem defenieren(sbit PMenue = P5^8;), klappt es ohne Probleme 
hab schon knapp 900Zeilen code und ich hatte bis jetzt keine prop.
Der c167 sowie und Vorgänger, sind Bitadressierbar und mit
sbit PMenue = P5^8; kann ich bitweise auf jeden port zugreifen(wie eine 
Variable mit der bezeichnung PMenue).
Hab mitlerweile einen Pulldownwiederstand(9.1k) dran. Das Problem ist 
nun, daß wenn ich den Schalter betätige, resetet der uC(Kurzschluß??). 
Wieso passiert sowas?? hat einer eine Idee??

Danke für die vielen Tips
Moderator (Firma: Titel) Persönliche Seite #1140561
Lesenswert?

> In wiefern kann der Watchdog den stören??
Indem er einen Reset erzeugt?

Auszug aus dem DB:
1
The Watchdog Timer is always enabled after a reset of the chip, 
2
and can only be disabled in the time interval until the EINIT 
3
(end of initialization) instruction has been executed. 
4
Thus, the chip’s start-up procedure is always monitored. 
5
The software has to be designed to service the Watchdog Timer 
6
before it overflows.

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