PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR Problem (Tasterabfrage?) VERZWEIFEL!!!



1hdsquad
19.02.2007, 14:47
Hallo,
ich bin am verzweifeln: Ich muß ein parr Taster mit meinem AVR abfragen, Entprellen nicht nötig. Ist in Bascom auch kein Problem, dachte ich bis jetzt. Das hier ist mein Testprogramm, es funktioniert NICHT.

$regfile = "m8def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000

Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input

Portd.2 = 1
Portd.3 = 1
Portd.4 = 1

Do
Portd.5 = Pind.2
Portd.6 = Pind.3
Portd.7 = Pind.4
Loop
End

Ich habe andere Programme getestet, andere Chips getestet, andere Routinen getestet. Ergebnis: Nicht das, was ich wollte. Bei einem Tiny2313 funktionierte keine Abfrage, aber Interrupt waren teilweise möglich, und er kann auch zuverlässig LEDs zum Blinken bringen oder programmiert werden. Der MEGA8 und MEGA 16 fragten die Tasten ab, aber wenn ich sie drücke, blinken die LEDs. Das ganze fandt auf dem Pollin Atmel Evaluationsboard statt.
Warum geht das nicht? Ich weiß nicht mehr weiter... :(
MFG und auf Hilfe hoffend... ;-)

P.S.: Ist Bascom schuld? Falsche Programmierung etc? PonyProg? Kabel? ...

chr-mt
19.02.2007, 15:01
Hi,
wenn du einzelne Pins auf Input oder Output umstellst heißt es immer "PIN"

Also statt:
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output

mal probieren:
Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.7 = Output

Gruß
Christopher

1hdsquad
19.02.2007, 15:07
Werd ich machen, aber steht es nicht immer überall anders?! Auch im Wiki? Die Ausgänge scheinen ja auch zu funktionieren, die LEDs blinken ja... Trotzdem danke!

1hdsquad
19.02.2007, 15:17
Nein, hilft nicht. Ändert auch den HEX-Code nicht, das kann es nicht sein...
MFG

ACDC
19.02.2007, 15:45
Ich kenne Bascom ja nicht, aber bei CONFIG handelt es sich doch sicher darum, einem Port-Pin einen festen Namen zuzuweisen, oder ? Und PORTD und PIND sind doch ziemlich sicher reservierte Token in Bascom, oder etwa nicht ?
Es muss doch auch in Bascom einen "Compiler-Lauf" geben. Und ich würde wetten, dass dieser einen, oder sogar mehrere Fehler ausgibt. Sicher würde es helfen, die Meldung dieses "Compiler-Laufs" hier mal reinzusetzen.

Gruß, Andreas

1hdsquad
19.02.2007, 15:50
Nein, keine Fehler. Und z.B. "Config Portd = Output" heißt nur, dass man den Port als Ausgang definiert. Das muß schon so...
Man kann auch irgenwas mit DDRC oder so schreiben, kommt aufs gleiche raus...
MFG

steveLB
19.02.2007, 15:53
möglichkeit nr1:
hat das wirklich keine auswirkungen ?
z.b. bei Pind.2, einmal heißt es pind.2, dann zeilen später wieder portd.2 und zum schluß hiterm "=" zeichen ists wieder pind.2 , du benennst das selbe 2 mal um.
Ist es in der "m8def.dat" so drinn das das pind das selbe ist wie portd ?

möglichkeit nummer 2:
wenn es egal ist wie man bennent , dann ist es wenn ich das programm richtig interpretiere , dann ist es egal was an input kommt, da du es später eh alles auf 1 setzt, somit wertest du gar kein ausgang aus

gruß

chr-mt
19.02.2007, 16:02
Hi,

beim konfigurieren eines kompletten Ports heißt es "PORT" :

config porta = output
config porta = input

Beim konfigurieren eines Pins heißt es dann "PIN" :

config pina.0 = output
config pina.0 = input

Bei lesen eines als Eingang konfigurierten Ports / Pins heißt es immer "PIN":

a=Pina
if pina.0=1 then

Aber die internen Pullups werden, bei einem auf Input geschaltetetn Pin mit "PORT" eingeschaltet

Porta.0=1


Beim schreiben eines als Ausgang konfigurierten Ports / Pins heißt es dann wieder "PORT"

Porta=255
Porta.0=1

Leicht verwirrend ;)


Vielleicht solltest du mal die Pullups einschalten ?
(Hier wieder mit "PORT" ! )

Portd.2 = 1
Portd.3 = 1
Portd.4 = 1

Uuups, übersehen, das hast du ja schon...

Gruß
Christopher

ACDC
19.02.2007, 16:22
Also sollte das Programm dann doch jetzt so aussehen, oder ?


$regfile = "m8def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000

Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.7 = Output
Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input

Portd.2 = 1
Portd.3 = 1
Portd.4 = 1

Do
Portd.5 = Pind.2
Portd.6 = Pind.3
Portd.7 = Pind.4
Loop
End


Wobei D5, D6, und D7 im Ruhezustand "1" sein müssten (wegen der Pullups) und nur durch eine Verbindung von D2, D3 oder D4 nach Masse ihren Zustand ändern ...

steveLB
19.02.2007, 16:39
also ich hab mir mal die wiki durchgelesen und ich würd das so versuchen :

$regfile = "m8def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000




Config Portd.5 = Output // stimmt laut wiki
Config Portd.6 = Output
Config Portd.7 = Output
Config Pind.2 = Input // stimmt laut wiki
Config Pind.3 = Input
Config Pind.4 = Input

Portd.2 = 1 // das ist doch um die pullups zu setzten oder ?
Portd.3 = 1
Portd.4 = 1

Taster1 Alias Pind.2
Taster2 Alias Pind.3
Taster3 Alias Pind.4
Ding1 Alias Portd.5 // ding ist einfach ein name
Ding2 Alias Portd.6
Ding3 Alias Portd.7

Do
if taster1=0 then
Ding1=1
else
Ding1 = 0 '
endif

if taster2=0 then
Ding2=1
else
Ding2 = 0 '
endif

if taster3=0 then
Ding3=1
else
Ding3 = 0 '
endif

Waitms 100
loop
End

alles hinter // sind komments

chr-mt
19.02.2007, 16:42
Config Portd.5 = Output // stimmt laut wiki
Aber nicht laut Bascom Hilfe.

Gruß
Christopher

steveLB
19.02.2007, 16:46
aso, das end noch vergessen
und hier ist aber 1 am eingang ne null am ausgang und umgekehrt ,
ändern in zum beispiel :
if taster1=1 then // also hier ne 1 statt 0, dann ist eingangs zustand gleich ausgangs zustand
Ding1=1
else
Ding1 = 0 '
endif

steveLB
19.02.2007, 16:56
weiß aber net obs so tut, nicht das du das huhn killst
von bascom hab ich kein plan eher C und assebler

Jon
19.02.2007, 17:06
Config Portd.5 = Output // stimmt laut wiki
Aber nicht laut Bascom Hilfe.
Laut BASCOM-Hilfe.
Bei mir geht es aber auch nur so, wie es in der Wiki steht.


$regfile = "m8def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000




Config Portd.5 = Output // stimmt laut wiki
Config Portd.6 = Output
Config Portd.7 = Output
Config Pind.2 = Input // stimmt laut wiki
Config Pind.3 = Input
Config Pind.4 = Input

Portd.2 = 1 // das ist doch um die pullups zu setzten oder ?
Portd.3 = 1
Portd.4 = 1

Taster1 Alias Pind.2
Taster2 Alias Pind.3
Taster3 Alias Pind.4
Ding1 Alias Portd.5 // ding ist einfach ein name
Ding2 Alias Portd.6
Ding3 Alias Portd.7

Do
if taster1=0 then
Ding1=1
else
Ding1 = 0 '
endif

if taster2=0 then
Ding2=1
else
Ding2 = 0 '
endif

if taster3=0 then
Ding3=1
else
Ding3 = 0 '
endif

Waitms 100
loop
So würde ich es jetzt auch probieren.


Portd.2 = 1 // das ist doch um die pullups zu setzten oder ?
Japs!

jon

1hdsquad
19.02.2007, 20:16
Bascom hat auch viele Fehler und Ungereimtheiten in der Hilfe, wer weiss... Ich hätte sowoeis Lust, auf C oder C++ umzusteigen, aber das ist jetzt ja egal.
Bascom scheint ziemlich tolerant, was die Bezeichnungen angeht. Ich sehe ja am HEX-Code, ob sich am Programm was ändert. Bleibt er gleiche, kann meine Änderung ja auch auf dem Chip nichts ändern. Werde mal eure Programme testen.
Achso: Da die LEDs ja je nach Pullupzustand an oder aus sind (Pullup = 1 heißt ja im Endeffekt LED ein, Pullup aus das Gegenteil), merke ich ja, dass das Programm korrekt arbeitet. Es fragt nur entweder die Taster nicht ab, oder wenn das funktioniert, dann blinken meine LEDs, anstatt zu leuchten. Bei dem Code verwunderlich ;-)

chr-mt
19.02.2007, 21:52
Hi,
ich habe mir eben den Schaltplan des Pollin boards angesehen.
Siehe da, alles anders als ich es gewohnt bin ;)
Leds werden gegen Masse betrieben, und was deinen Fehler angeht :
die Taster schalten gegen Plus!
Dann kann das ja nicht gehen, wenn die Pullups eingeschaltet sind.
Damit wird der Eingang ja hochgelegt.
Der 33K Pulldown gegen Masse hilft dann auch nicht viel.
Vielleicht hängt der Eingang dann irgendwo in einem Bereich, in dem er gerade mal so schaltet.
Daher vielleicht das blinken....
Also Pullups im Programm rausmachen, dann sollte es gehen.

Gruß
Christopher

1hdsquad
19.02.2007, 22:02
Ok, ich schau nach... Komisch, warum machen die bei Pollin sowas? Welche Vorteile hat das???
MFG

chr-mt
19.02.2007, 22:08
Hi,
keine Ahnung,
vielleicht ist das für's Lernen einfacher,
da bei einer 1 geschaltet wird und eine 1 auch als leuchtende LED angezeigt wird.
Ist erstmal irgendwie logischer als andersrum (0 = AN), oder ?

Gruß
Christopher

1hdsquad
20.02.2007, 15:53
JAAAAAAA, es geht!!! ;-) Ich könnt euch knuddeln ;-)
Mal im Ernst, sowohl Board als auch Hühnerklappe laufen wieder. Merke: Wenn man Portx.y ausliest, erhält man den Pullup, nicht den Zustand das Pins...
Also dankeschön allen, die mir geholfen haben, besonders Christopher...
MFG