c167: Schleifenbedingung

Gast #1137584
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
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
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
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
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
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
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...)
Gast #1137838
compiler Keil.
Domian, hab nur den Port5 auf low gesetzt: P5 = 0x0000; wie du bereits 
erwähnt hast ist p5 ja ein Eingang und somit fällt DP5(richtung ja weg).
fehlt da noch was??
Moderator (Firma: Titel) Persönliche Seite #1137869
> 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
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
Gast #1140554
Hab die lötstellen bereits geprüft alles i.o.
Den Watchdog habe nicht eingeschaltet aber auch nicht ausgeschaltet.
In wiefern kann der Watchdog den stören??
Moderator (Firma: Titel) Persönliche Seite #1140561
> 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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.