PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Taster funktionieren nicht. Keine reaktion



ATFlo32
16.10.2012, 18:13
Hallo liebe RN-Community,

da ich neu bin, schriebe ich erst mal ein paar Infos über mich und mein Projekt:
Ich habe mir gestern einen ATMega 32 und einiges an Zubehör gekauft, da ich mit einem Kollegen momentan dabei bin, einen Rasenmähroboter zu entwickeln.
Wir hatten schon ein fast funktionsfähiges Gefährt, bis es uns den Controller geschossen hat. Es handelte sich um einen C-Controll Mega 128 von Conrad. Wir haben uns überlegt ob wir nochmal 25€ investieren und uns mit dem Conradzeug rumschlagen oder nochmal von 0 zu beginnen, dafür aber mit einer günstigen ordentlichen Hardware. Aus diesem Grund sind wir nun dabei, uns mit einem AVR ATMega 32 und BASCOM zu befassen.

Nun zu meinem Problem:

Ich habe gestern fleißig gebastelt und programmiert und habe auch eine LED über einen Taster ansteuern können. Doch aus welchen Gründen auch immer, funktioniert das heute nicht mehr. Es ist bis auf die Software alles wie gestern. Habe den Taster auch an unterschiedliche Ports gehängt und prograsmmiert, aber es geht nicht. Der Taster hängt zwischen dem PORT und GND. Der interne Pu-Up ist auch aktiviert.
Vielleicht habe ich einen kleinen Fehler im Programm, den ich momentan nicht sehe.

Über eure Hilfe wüde ich mich sehr freuen.

Gruß
ATFlo32

Hier die Software:

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
$prog &HFF , &HFF , &HD9 , &H00 ' generated. Take care that the chip supports all fuse bytes.

Config Portc.0 = Output
Config Portc.1 = Output
Config Pinc.7 = Input
Portc.7 = 1

Do
If Pinc.7 = 0 Then
Portc.0 = 1
Waitms 5
Portc.0 = 0
Waitms 100
Else
Portc.1 = 0
End If

Loop


End

HeXPloreR
16.10.2012, 18:22
Spannung über Batterie? Die möglicherweise leer... weil angelassen oder so?
Vergößer bitte testweise das Waitms 5 auf etwa 500.
Baue ggf eine extra LED an einen freien Port, die dir den generellen Betrieb des µC anzeigt. Die schaltest Du vor der Do loop Schleife einfach zur kontrolle an. LED mit Vorwiderstand etwa 470 Ohm?
16 MHz Quarz ist dran? ...mit 2x 22pF? Und auch im µC eingestellt?

"$prog &HFF , &HFF , &HD9 , &H00 " <- das kenne ich nicht, aber die warnung sollte man ernst nehmen.
Vielleicht mal auskommentieren ( ' )

ATFlo32
16.10.2012, 18:33
Hallo,

danke erst mal für die schnelle Antwort.

Die Spannungsversorgung geht über akkus. Die Spannung beträgt aber 4,8V. Also daran sollte es nicht liegen. Die Zeit habe ich verlängert und eine dritte LED angeschlossen und auch im Programm hinzugefügt:
Config Portc.2 = Output
Portc.2 = 0
Diese leuchtet aber nicht!? Egal ob Portc.2 = 1 oder 0...

Der 16 Mhz Quarz ist mit den 22pF Kondensatoren angeschlossen und es ist alels eingestellt. Das $prog &HFF , ..... ist ein Befehl von Bascom, mit denen er die Fusebits schreibt und ändert. Habe ich vergessen zu löschen.

Wenn ich die LED nur blinken lassen möchte, funktiniert dies ohne probleme. Aber mit dem Taster geht es nicht...


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
'$prog &HFF , &HFF , &HD9 , &H00 ' generated. Take care that the chip supports all fuse bytes.

Config Portc.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Config Pinc.7 = Input
Portc.7 = 1

Portc.2 = 0

Do
If Pinc.7 = 0 Then
Portc.0 = 1
Waitms 500
Portc.0 = 0
Waitms 100
Else
Portc.1 = 0
End If
Loop


End

HeXPloreR
16.10.2012, 18:40
Richtig rum angeschlossen? PortC.2 = 1 sollte es heißen wenn es die Kontroll LED sein soll die angeht, sobald der µC an der stelle vorbei eiert ;) Der PortD hat damit wenig zu tun.
Irgendwie habe ich vorher nur was von einer LED gelesen, was soll die denn machen? Möglich das Deine else Anweisung nicht komplett ist? Weil da geht keine LED an.

ATFlo32
16.10.2012, 18:50
Also, habe nun herausgefunden warum die Kontroll-LED nicht leuchtet, sie ist kaputt :rolleyes:
Jetzt leuchtet sie sogar :D

Also, momentan sind drei LEDs angeschlossen. Die eine an Port C.0 ist über ein Mosfet (die Ansteuerung funktioniert; kann diese LED blinken lassen), Port C.1 ist eine zweite LED und an Port C.3 ist die Kontroll-LED, welche ich auf deinen Rat eingebaut habe.
Nun soll die LED am Mosfet angehen, wenn ich den Taster drücke und die LED 2 ausgehen.

Aber der Taster macht eben nix.

Habe die Elseanweisung mal so geändert, dass er einfach nur die LED 2 ein, bzw ausschaltet. Es tut sich aber nix:

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
'$prog &HFF , &HFF , &HD9 , &H00 ' generated. Take care that the chip supports all fuse bytes.

Config Portc.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Config Pinc.7 = Input
Portc.7 = 1

Portc.2 = 0

Do
If Pinc.7 = 0 Then
Set Portc.1
Else
Reset PORTC.1
End If
Loop


End

EDIT:
Am Taster und den Zuleitungen kann es übrigens auch nicht liegen, die haben alle durchgang. Kann den Port auch direkt auf Masse legen, aber es passiert nichts

HeXPloreR
16.10.2012, 19:01
Eine LED kann aber auch erst ausgehen wenn sie mal an ist -wo schalteste Du Deine zweite LED an, damit sie über den taster aus geht?
Bitte baue keine neu Befehle ein, denn so finden wir hier gemeinsam den Fehler sicherlich noch schwerer.
Also PortC.2 ist immer noch nicht an - damit leuchtet ertsmal keine Kontroll-LED - damit auch keine Kontolle ob der µC überhaupt mit dem gegenwärtigem Programm läuft.

LED am Mosfet???

Taster baue ich auch mal gerne falsch ein...die haben dann immer durchgang bei nicht drücken...

ATFlo32
16.10.2012, 19:06
Die Änderungen sind nur für mich zum Testen., Ich poste es aber trotzdem mit. Also es geht natürlich noch um das Anfangsporgramm /problem

Die LED leuchtet. Habe ich weiter oben doch geschrieben. Also geht das Programm schon mal bis zum Anfang der Do Loop schleife.

EDIT:

Ja, die LED (handelt sich um eine Power-LED) ist über einen Mosfet am µC. Aber das tut nichts zu sache, die LED geht ja. Nur der Taster nicht.
Der Taster ist ein einfacher Schließer mit zwei Beinchen, falschrum einbauen geht da nicht

HeXPloreR
16.10.2012, 19:13
wenn noch um das Programm oben geht:dann ändere bitte PortC.0 in 1 in der do loop. dann sollte LED 2 daran blinken. und wenn Du los lasst bleibt wegen else die LED aus

Sorry, aber ich denke nicht das die Kontroll Led leuchtet, denn du schaltest sie nicht ein. Sie ist = 0 ; also aus

ATFlo32
16.10.2012, 19:19
Ich glaubich bringe dich mit den Programmen etwas durcheinander. Sorry dafür.

Ich denke ich habe verstanden was du meisnt. In meinem Programm sehe ich die Ports wie Taster an. Deshalb habe ich nur je einen Port pro Bedingungsteil. Daher soll ich einen der beiden mal ändern. Verstehe ich das richtig?

Vielen Dank auch nochmal für deine Hilfe. Hoffe wir finden das problem :)

EDIT:
Also die LED leuchtet nun. Jedoch nur sehr sporadisch. Und blinken tut sie auch nicht.
Aber immerhin ein kleiner Fortschritt

Thomas$
16.10.2012, 19:27
nun bleibt nur noch die möglichkeit das de rtaster am falschen pin hängt ;) liegen denn am taster die 5V vom pullup an? Geht die spannung auf 0V bei Tastendruck?

ATFlo32
16.10.2012, 19:39
Vielen Dank Thomas, dass du dich auch mit einklinkst.

Ich hab die Fehler gefunden. Es war sowohl der Fehler in der Software auf den mich Hexplorer hingewiesen hat, Danke hierfür.
Und das zweite war, dass der Taster nicht mit GND verbunden war.... Habe ihn aber vorhin sicher mit GND verbunden gehabt, da ging es auch nicht. Lag dann warscheinlich an der SW.

Also vielen Dank euch beiden und ich hoffe, dass ihr mir meinen Anfängerfehler verzeihen könnt

HeXPloreR
16.10.2012, 19:45
na klar...du möchtest sicherlich nicht wissen wieviele und welche Fehler ich mir schon ankreiden mußte...als Beispiel nur ma meine gloreiche idee einen gewinkelten 5x2 Wannenstecker für ISP auf nem Steckbrett zu benutzen....da ging das programmieren seltsamerwesie nicht mehr...bis ich gesehen hatte das ja dann die Datenleitungen auf GND mit hängen...

Also Viel Erfolg weiterhin