mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik c167: Schleifenbedingung


Autor: Jam (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hab ich da was vergessen zu setzen??
Ist der Pin als Eingang definiert?

>PMenue =0;
Was willst du damit erreichen?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg S. wrote:
>>Hab ich da was vergessen zu setzen??
> Ist der Pin als Eingang definiert?
Der ganze P5 ist beim C167 nur Eingang (analog und digital).

> Pin5.8
> PMenue = P5^8;
??
PMenue = P5&0x0100;
wäre bei einem High-aktiven Schalter am Pin P5.8 angebracht.

Autor: Jam (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: Jam (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> P5^8
Das ^ ist in C ein EXOR.
Und mit dezimal 8 manipulierst du das Bit 3  :-o
Fazit: P5 exor 8  ist nicht P5.8


Mach an deine Schaltung mal noch einen Pulldown hin ;-)
Wie soll denn der Eingangspin sonst auf 0V kommen?

+5V
 |___/_____ P5^8
        |
        R
        |
       GND

Autor: PSchneider (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marco G. (stan)
Datum:

Bewertung
0 lesenswert
nicht 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
#define PMenue P5_P8

if (PMenue) {
...
}

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...

Autor: Jam (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ist das nicht so das wenn ich den port5.8 auf hight/low setze ich einen
> hohen/kleinen wiederstand am port habe??
Nein, der P5 ist ein hochohmiger (weil auch ADC) Eingangsport ohne 
schaltbare Pullups/Pulldows.

Autor: Damian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> mit P5^8; kann ich explizeit den Port ansprechen und ja er ist im
> include-file c167.h definiert.
Welcher Compiler?

Ich weiß nicht so recht...
In meinen C-Programmen ist das ^ ein Bit-Operator.

Autor: Marco G. (stan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damian wrote:
> du hast einen internen pull up widerstand an 5V.

nein hat er nicht.

Autor: Jam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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??

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
sbit PMenue = P5^8;
Diese Compilererweiterung ist übrigens was ganz anderes als wenn du 
schreibst:
PMenue = P5^8;
das sbit macht den Unterschied.

Autor: Marco G. (stan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller wrote:
> Da solltest du deinen Portpin so definieren:
sbit PMenue = P5^8;
>

besser wäre wohl
#define PMenue P5_P8
weil P5_P8 schon mit sbit definiert ist.

Autor: Jam (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> resetet der uC(Kurzschluß??).
Ich kenne deine Lötkünste nicht, würde hier aber eher auf ein 
Softwareproblem tippen.
Hast du den Watchdog eingeschaltet?

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird an dem Pin vielleicht irgendein Interrupt ausgelöst? Noch dazu 
einer, zu dem es keinen handler gibt?

Autor: Jam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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??

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

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

Autor: Marco G. (stan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es könnte sein dass der Watchdog schon in der STARTUP.a66 (die Datei mit 
dem Startup-Code, die µVision einbindet) ausgeschalten wird.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.