PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega8 und Taster



DanielSan
09.08.2009, 10:53
Hi,

ich habe ein Problem ich bekomme es nicht hin, das mein Controller auf meinen Taster reagiert.

Ich habe den Taster von PB6(XTAL1) auf GND gelegt. Als Programm habe ich:


$regfile = "m8def.dat"
$baud = 19200
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 4000000

Config Portb.6 = Input
Config Portb.1 = Output


Do
If Portb.6 = 1 Then
Portb.1 = 1
Waitms 600
Portb.1 = 0
Waitms 600
Else
Portb.1 = 1
Waitms 100
Portb.1 = 0
Waitms 100
End If
Loop

End

Die Led die an Portb.1 höngt blinkt schnell. Also scheint der Portb.6 ja auf Low zu stehen.
Habt ihr evtl ne Idee warum ich keine Reaktion auf einen Tastendruck bekomme?

Danke
MFG Daniel

vistauser
09.08.2009, 12:21
Hallo Daniel,
nach mühsamer Kleinarbeit ist es mir gelungen das Programm so hinzubiegen, daß es auf meinem Testboard tut was es soll.
Viel Erfolg
Olaf


$regfile = "m32def.dat"
'$baud = 19200
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000

Config Pinc.6 = Input
Config Pinc.1 = Output

Led1 Alias Portc.1 ' use 'port' if You're writing
S1 Alias Pinc.6 ' use 'pin' if You're reading



Do
If S1 = 1 Then
Led1 = 1
Waitms 600
Led1 = 0
Waitms 600
Else
Led1 = 1
Waitms 100
Led1 = 0
Waitms 100
End If
Loop

End

murdocg
09.08.2009, 12:47
Wieso nach mühsamer Kleinarbeit?!
Der einzige Fehler liegt darin das er in der Input Definition und an den andren Stellen PORTB.6 statt PINB.6 genutzt hat.

LG Fabian

DanielSan
09.08.2009, 13:05
Hi,

Danke an euch beide das war mein Fehler.

Habt mir echt klasse geholfen!

MFG
Daniel

murdocg
09.08.2009, 14:33
Kein Problem ;-)
Den Fehler hab ich anfangs auch immer gemacht, deshalb ist's mir gleich aufgefallen.
Was Vistauser mit mühsamer Kleinarbeit meinte würde mich trotzdem interessieren. :-k

LF Fabian

vistauser
09.08.2009, 15:18
Hi murdocg,
kann ich dir erklären:
kann nicht programmieren und probiere und probiere und probiere
und wenns dann endlich hinhaut könnte ich vor Freude in die Luft
hupfen.
War doch ein prima Beispiel für mein neues Atmel Evaluations-
und Addon-Board. Es gibt eben Leute, die sich sowas mühsam erarbeiten müssen aber einen Mordsspass damit haben.
Servus
vistauser

murdocg
09.08.2009, 17:27
Achso nadann ist das ja was andres ;-) Als Anfänger ist das Thema Fehlersuche wirklich schwer.

DanielSan
09.08.2009, 23:28
Hi,

also ich kann ein bisschen Programmieren, aber der Fehler war ja ehr spezifisch auf Mikrocontroller bzw. Bascom.
Ich frage lieber wenn ich nicht mehr weiter weiß. Besonders in diesem fall glaube ich hätte ich den fehler nie gefunden^^

Nochmals Danke
MFG Daniel

DanielSan
10.08.2009, 18:10
Hi,

jetzt habe ich das nächste Problem^^

Ich möchte mit einem Taster bei einem kurzen druck Aktion A ausführen und wenn der Taster 2sek. lang gedrückt wird möchte ich Aktion B ausführen.

Wie könnte man das realisieren? Ich habe schon mit If schleifen und waitms was versucht, aber das führt mich nicht zum Ziel.

Danke
MFG Daniel

Che Guevara
10.08.2009, 18:37
Hallo Daniel,

hab hier mal kurz einen Code geschrieben, allerdings mit meinen "Einstellungen". Musst du nur auf dich anpassen, also µC, Crystal, usw.



$regfile = "m32def.dat"
$crystal = 16000000

Config Pinb.0 = Input
Portb.0 = 1
T1 Alias Pinb.0

Dim A As Byte


Do


If T1 = 0 Then
While T1 = 0
Waitms 10
Incr A
If A = 255 Then A = 200
Wend
If A >= 200 Then
'Aktion bei 2 Sek.
Else
'Aktion bei kurzem Tastendruck
End If
End If


Loop

End


Gruß
Chris

DanielSan
10.08.2009, 19:15
Hi,

mh also so kann ich zwar mit langem druck eine aktion ausführen, aber die aktion bei kurzem druck rattert die ganze zeit durch. Ich habe schon "if t1 = 1 eingesetzt aber das ändert nichts.

Mein Taster ist ziemlich Nervös. Debounce kann ich so nicht mehr verwenden oder?

Edit: Ok jetzt hab ichs in eine Subroutine gebaut dann klappt es auch mit Debounce. Erst ist mir die Variable A immer "vollgelaufen" aber jetzt sag ich an der entsprechenden stelle immer "A = 0".
Danke das ist ne wirklich tolle Lösung.

Danke
MFG Daniel

Che Guevara
10.08.2009, 20:27
Das freut mich, wenns funktioniert :-)

Wo genau ist den die Variable immer übergelaufen?
Wäre nett, wenn du mir das etwas (nur ein kleines bisschen) genauer sagen könntest, damit ich, wenn ich auch mal sowas brauche, nicht auch den selben fehler mache ;-)

und du könntest deinen fertigen code hier reinstellen, damit alle was davon haben.

Gruß
Chris

DanielSan
11.08.2009, 07:25
Hi,

mein Code ist schon zu groß das würde hier wohl nur verwirren. Aber ich habs an deinem mal gemacht.


$regfile = "m32def.dat"
$crystal = 16000000

Config Pinb.0 = Input
Portb.0 = 1
T1 Alias Pinb.0

Dim A As Byte


Do
A = 0

If T1 = 0 Then
While T1 = 0
Waitms 10
Incr A
If A = 255 Then A = 200
Wend
If A >= 200 Then
'Aktion bei 2 Sek.
Else
'Aktion bei kurzem Tastendruck
End If
End If


Loop

End

Die Variable läuft auch mit der Zeit voll wenn man kurz drückt also 10 mal kurz = Aktion bei 2 sec. Deswegen muss man A reseten.
Ich hoffe du verstehst wie ich das meine.

MFG Daniel

Che Guevara
11.08.2009, 12:48
Ok, also dieser banale Fehler ist mir schon lange nicht mehr passiert *verwirrt*
Darf ich fragen, was du gerade machst??

Gruß
Chris

DanielSan
12.08.2009, 11:05
Hi,

Sry das ich jetzt erst antworte, bin da drüber weggekommen.

Klar darfst du fragen. Ich baue mir einen Datenlogger für Beschleunigungskräfte. Der soll dann später in mein Modellflugzeug. Ich hatte schonmal einen aber da ist der Sensor kaputt gegangen. Der konnte allerdings nur bis +-10g in 2 Achsen. Diesesmal werden es +-40g in 3 Achsen. Die 10g habe ich bereits locker erreicht, ich hoffe das ich mit 40g etwas weiter komme.
Damals wurden die daten auf ein EEPROM geschrieben, der Logger hatte kein Display usw. Jetzt kriegt er ne 1Gb microSD Karte im SD-Karten adapter. Der Adapter wird an die Platine gelötet, mit einem 2ten Adapter kann ich dann die Daten per Cardreader auf mein Notebook ziehen.
Der Datenlogger soll später dann auch ein Menu bekommen welches über 4 Taster geführt wird. Deswegen brauchte ich hier diesen Taster ;-).

Bei Interesse kann ich gerne noch weitere Infos geben.

MFG Daniel

Suggarman
13.08.2009, 14:40
Klar darfst du fragen. Ich baue mir einen Datenlogger für Beschleunigungskräfte. Der soll dann später in mein Modellflugzeug. Ich hatte schonmal einen aber da ist der Sensor kaputt gegangen. Der konnte allerdings nur bis +-10g in 2 Achsen. Diesesmal werden es +-40g in 3 Achsen. Die 10g habe ich bereits locker erreicht, ich hoffe das ich mit 40g etwas weiter komme.


Du willst wohl messen, wie sich ein Modell mit 200km/h in den Acker bohrt.....
Zur Lagemessung nehme ich einen Beschleunigungssensor mit 2g.
So aus dem Bauch heraus würde ich behaupten, dass bei einem Looping mit 10g viele Tragflächen brechen dürften.

mfg

Stefan

DanielSan
13.08.2009, 16:48
Hi,


So aus dem Bauch heraus würde ich behaupten, dass bei einem Looping mit 10g viele Tragflächen brechen dürften.

Ja da hast du wohl recht. Ich hatte meinen Sensor damals in einem Kunstflieger, so wie sie beim TOC geflogen werden. Es war eine Raven.

Im normalfall schafft man die 10g Grenze wohl nicht.

Ich hab auch mal mit unserem alten Ford Sierra (mittlerweile der Abwrackprämie zum Opfer gefallen) eine Vollbremsung gemacht da hatte ich über 1g auf dem "Tacho". Es war Winter und die Straßen etwas... naja ich will nicht sagen glatt.

Kannst du denn mit deinem Sensor auch in Kurven die Lage sauber erkennen? Durch die Fliehkraft "verschiebt" sich für den Sensor ja die Erdanziehung. Erzähl mir da mal ein paar Details ;-).

MFG
Daniel

Suggarman
14.08.2009, 08:19
Kannst du denn mit deinem Sensor auch in Kurven die Lage sauber erkennen?


Nein, zu dieser Erkenntnis bin ich nun, wie viele andere auch, gekommen.
Ich habe nun zusätzlich einen 2-Achs-Gyro verbaut. Bisher habe ich damit aber noch keine Testflüge gemacht. Ich habe bisher nur am Schreibtisch getestet, die Sensoren verschieden mathematisch verknüpft und mir die Ergebnisse am PC grafisch dargestellt.
Im Moment programmiere ich noch ein bischen den RN-Mega2560. Ich hoffe, dass ich in ein paar Tagen wieder so weit bin, dass ich mal einen Meßflug mit der Twinstar machen kann. So weit war ich schon vor langer Zeit. Allerdings mit einer C-Control an Bord und die hatte ihre Leistungsgrenzen erreicht. Nun "stricke" ich alles in Bascom neu.

mfg

Stefan

DanielSan
14.08.2009, 11:10
Ja das mit der Leistungsgrenze der C-Control kommt mir bekannt vor ;-)

Welchen Gyro benutzt du denn? Warum machst du "nur" 2 Achsen? ist die Drehung durch Wind etc. um die Hochachse nicht so schlimm? Oder hat der Twinstar kein Seitenruder? Dann wäre es ja klar das du nur 2 Achsen verwendesst.

Ich habe es doch richtig verstanden, das du auch in die Steuerung eingreifst oder? Falls nicht ist das irgendwann dein Ziel?

MFG
Daniel

Suggarman
14.08.2009, 13:08
Ich benutze den IDG500 von Sparkfun.
Zwei Achsen reichen mir. Die Quer- und Höhenlage müssen schnell und präzise gesteuert werden. Über das Seitenruder (mit Zumischung des Querruders) erfolgt aus den GPS-Daten die Kurskorrektur.
Die Twinstar hat schon ein Seitenruder. Ohne wäre eine Kurssteuerung recht mühsam. Ich will von Hand starten und dann den Sender ausschalten. Zur Landung schalte ich wieder ein. Im Moment ist mir die Umschaltung noch etwas zu träge (gut 3 Sekunden, wovon der Empfänger aber fast 2 verbraucht).

mfg

Stefan