mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mega32 pins vergleichen


Autor: Thorsten D. (jupiter1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Habe wieder einmal ein Problem.

Ich möchte den gesamten PinA bereich einlesen,dieser Variiert, und 
möchte dann mit einem festen wert den ich in ein Register geladen habe 
,vergleichen.
Anhand dieses Vergleiches soll ein wert gesetzt oder nicht gesetzt 
werden.

Habe schon alles versucht, aber der Zustand des Wertes der gesetzt 
werden soll bleibt immer gleich ,ob ich die A pins als Ein oder Ausgang 
setze, das Ergebnis ist immer das gleiche.

Vielleicht hat einer ein Programmbeispiel weil er so etwas schon mal 
anwenden musste.

Danke

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thorsten D. schrieb:

> Vielleicht hat einer ein Programmbeispiel weil er so etwas schon mal
> anwenden musste.

Zeig deinen Code und die äussere Beschaltung des µC.
Es ist viel sinnvoller dir in deinem Code/Beschaltung aufzuzeigen wo das 
Problem liegt, als irgendwelchen Code ins Blaue hinein für dich zu 
schreiben, ohne zu wissen ob es sich um ein Hardware oder 
Softwareproblem handelt.

Ein häufiger Fehler ist es zb. dass das PORT Register anstelle des PIN 
Registers genommen wird. Es kann aber auch sein, dass du eigentlich 
Pullups an den µC Pins haben solltest und nicht hast und daher offene 
Eingänge hast, die jeden beliebigen Zustand annehmen können, je nachdem 
ob der Radio nebenan eingeschaltet ist oder nicht.

Autor: Thorsten D. (jupiter1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist soweit richtig wie du sagst.

Ich habe vor den pins einen DIP-Schalter der ausgeschaltet ist.
Die A Pins setze ich alle auf 1 (pins haben 5V) und mit dem DIP-Schalter
ziehe ich die Pins auf 0V wenn ich einen Schalter betätige.

Habe insgesammt 6 Schalter und kann demnach von pina,7 bis pina,2 einen 
zustand bestimmen.

Ich hoffe das geht so.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeig doch bitte einfach mal dein (Minimal-)Programm, mit dem du 
Schwierigkeiten hast.

Autor: Thorsten D. (jupiter1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in temp1,pina
ldi temp2,0b01010000

cp temp1,temp2
brsh weiter
call null

weiter:
call eins

Autor: Thorsten D. (jupiter1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist übrigens Assembler aus dem AVR Studio.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> cp temp1,temp2
> brsh weiter
> call null

> weiter:
> call eins

und wass passiert nach dem

call null

dann kommt ein

call eins

damit ist es immer eins

Autor: Thorsten D. (jupiter1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok habe vergessen...

in temp1,pina
ldi temp2,0b01010000

cp temp1,temp2
brsh weiter
call null
jmp zeige0

weiter:
call eins

zeige0:
..........

Autor: Thorsten D. (jupiter1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry habe etwas Druck...

in temp1,pina
ldi temp2,0b01010000

cp temp1,temp2
brsh weiter
call null
jmp zeige0

weiter:
call eins
jmp zahl

zeige0:
..........

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thorsten D. schrieb:
> in temp1,pina
> ldi temp2,0b01010000
>
> cp temp1,temp2
> brsh weiter
> call null
>
> weiter:
> call eins

Das ist also Dein ganzes Programm, dann kann es ja nicht funktionieren.
Du hast 6 Taster, also 2 Pins floaten immer lustig umher und die der 
offenen Tasten auch.

Nicht benutzte Pins ausmaskieren, benutzte an Pullups legen.
Und es gibt auch einen CPI-Befehl.

Peter

Autor: Thorsten D. (jupiter1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also DDRA als Eingang definieren,10k Pullup Widerstände an die pins 
gegen Vcc
und mit diesem Programm ist der Fehler Geschichte!!

Programmausschnitt:
.....

einser:
   push temp1
   push temp2
   in temp1,pina
   ldi temp2,0x0a
   cp  temp1,temp2
   brsh einser0
   call null
   pop temp2
   pop temp1
   ret

einser0:
   call eins
   pop temp2
   pop temp1
   ret
......

Danke Peter!!!!!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thorsten D. schrieb:
> Also DDRA als Eingang definieren,10k Pullup Widerstände an die pins
> gegen Vcc
> und mit diesem Programm ist der Fehler Geschichte!!

Aber nur fast, weil Du nen Größer/Gleich-Befehl benutzt und die 
floatenden unbenutzten Pins die niederwertigsten sind.

Richtig:
   in    temp1,pina
   andi  temp1, ~0x03  ; mask pin 1,0
   cpi   temp1, 0x08   ; or 0x0C ? 
   brsh  einser0


Peter

Autor: jupiter1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ich gemacht.

Ich habe beim PortA generieren die Pins 0 und 1 als Ausgang gesetzt, nur
die anderen benutzt, also als Eingänge gesetzt.

ldi r16,0xc0
out ddra,r16

Denke das geht auch.

T.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jupiter1 schrieb:
> Habe ich gemacht.
>
> Ich habe beim PortA generieren die Pins 0 und 1 als Ausgang gesetzt, nur
> die anderen benutzt, also als Eingänge gesetzt.
>
> ldi r16,0xc0

Das sind dann aber Pin 7, 6

> out ddra,r16
>
> Denke das geht auch.

Nö.

Wenn die Pins immmer nur auf konstantem Pegel sind, ist das doch 
ziemlich witzlos.
Wenn Du also die Pins benutzt, kennst Du ihren Zustand beim Vergleich 
nicht.

Machs wie alle, maskiere.


Peter

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.