PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Impuls soll Ausgang permanent setzen und auch wieder abschal



Steffen44
26.02.2007, 16:56
Hallo

ich bekomme über den Waitkey Befehl im Bascom einen kurz Impuls geliefert mit dem ich einen Ausgang des µC permanent schalten möchte. Im Prinzip wie ein Selbsthaltung.

Mir fällt einfach nichts ein wie ich eine Selbsthaltung realisieren kann so das ich einen Impuls für ein und einen Impuls für aus schicke und der Ausgang danach geschalttet wird.

Ich habe mir überlegt im Eprom eine 0 und eine 1 abzulegen je nachdem welcher Schaltzustand geschickt wurde aber das geht auch nur 100.000 mal und dann geht der Eprom ja schon kaput :-(


Ich hoffe ihr habt ein paar Vorschläge für mich.

Vielen Dank und Gruß
Steffen

Stone
26.02.2007, 17:14
Wie lang ist der Impuls 1us- 1ms - 1s,
Mit Interrupt ist es am einfasten und dann per Toggle PortX.X

MfG Matthias

SprinterSB
26.02.2007, 17:15
Ist das Problem das Schalten an sich oder der Erinnern nach Abschalten/Einschalten der Versorgungsspannung?

Steffen44
26.02.2007, 20:13
nein erinnern muß sicher Controller nicht mehr nach der Spannungswiederkehr.

Das mit dem Interupt klingt interessant. Gibt es irgendwo Beispiele wie man das anstellt ?

Der Impuls der kommt ist ca 50 ms und läßt sich bestimmt auch noch auf 500ms erhöhen wenn es sein muß.


Gruß
Steffen

repi64
26.02.2007, 21:43
In der Bascom Hilfe gibt es doch Beispiele ohne Ende.
Und der Hinweis mit "Toggle" wurde ja auch schon erwähnt.

Steffen44
27.02.2007, 07:15
ja repi64 wenn es so einfach wäre würde ich ja nicht fragen und die Bascom Hilfe ist so umfassend das ich es nie finde wenn ich nicht die passenden Suchbegriffe habe.


Das mit dem Interrupt und dem Toggle kann doch nicht hinhauen wenn ich 4 Digitalausgänge habe oder ? Ich habe nicht viel Ahnung von den Interupts aber wird der Interupt nicht einfach nur gesetzt wenn irgendwas da angekommen ist.

Wie soll der Interupt unterscheiden für welchen Digitalausgang ich diesen Toggle Befehl ausführen will ? Oder verstehe ich da was falsch ?


Gruß
Steffen

for_ro
27.02.2007, 11:19
Woher weisst du denn, für welchen Ausgang du umschalten musst? Wenn du dass mitteilst, dann können wir auch überlegen, wie du den Interrupt programmieren kannst.
Und dass es 4 Ausgänge sind, wusste bis jetzt noch niemand.
Welchen µC hast du denn und ist da vielleicht noch ein Interrupt Einagng frei?

Gruß

Rolf

Steffen44
27.02.2007, 11:39
ich habe den ATMEGA2560. Diesen habe ich schon auf einem festem Experimentierboard aufgebaut und fest verdrahtet.

Ich entscheide über einen Taster im Excel 2000 welcher Ausgang schalten soll.

Ich empfange dann im UART eine 1 für Ausgang 1 eine 2 für Ausgang 2 usw.

Ja das mit den 4 Ausgängen hätte ich vieleicht hinschreiben sollen wenn man nur einen Ausgang benutzt dann gibt es wirklich genügend Beispiele bei mehreren scheint es ein Problem zu sein.


Gruß
Steffen

CR-Racing
27.02.2007, 17:43
So z.B.

Dim A as Byte
A="Empfangenes Zeichen"
Select Case A
Case 1: toggle Port x.x
Case 2: toggle Port y.y
usw.
end select

Steffen44
28.02.2007, 10:35
Hallo Cr-Racing

ich habe es mal auf mein Programm angepasst aber alles was rauskommt ist ein kurz aufleuchtender Ausgang. Das dieser Permanent gesetzt wird ist nicht der fall


do
Rs232empfangen = Inkey(#4) 'wandelt in ASCI

Select Case Rs232empfangen
'Empfangene 1 ist ASCI 49
Case 49 : Toggle Porth.3
'Empfangene 2 ist ASCI 50
Case 50 : Toggle Porth.5

End Select
loop


Langsam glaube ich es hat wieder etwas damit zu tun der ATMEGA2560 wieder nicht richtig von der aktuellen Bascom Version 1.11.8.3 unterstützt wird.

Gruß
Steffen

for_ro
28.02.2007, 12:01
Gib doch einfach einmal
Toggle Porth.3
ein, ohne RS232 abzufragen. Dann muss der Ausgang doch zumindest stehen bleiben.
Ansonsten würde ich denken, dass du mehrfach den Character 49 bzw. 50 empfängst, sodass der Port dann noch mal toggelt.

Gruß

Rolf

Steffen44
28.02.2007, 12:19
ich glaube ich habe es nun verstanden warum es nicht geht es verhält sich bei mir so :

Bei waitms 40 Blinkt meine LED am Ausgang im 40ms Takt
do
toggle port x.x
waitms 40
loop

Ohne den Behl waitms bleibt der Ausgang permanent ein
do
toggle port x.x
loop


Das bedeutet wenn ich also den kurzen Impuls abfrage und meine Schleife mit dem waitms 40 durchläuft das dann nur die Bedingung erfüllt ist das mein Ausgang nur ein einziges mal für 40ms schaltet.

Ok daraufhin habe ich versucht es in eine Subroutine zu packen nur das dumme ist wenn ich 4 Ausgänge permanent schalten möchte brauch ich für jeden erdenklichen Zustand ja ca. 16 Subroutinen wo sich mein ellenlanger Code permanent wiederholt und nur jewals der Ausgang Low oder high gesetzt wird.


Ich verstehe nicht warum es so schwer ist mal Zeichen vom Uart so auszuwerten das ein Ausgang geschalten und gehalten wird bin ich zu dumm oder was ?


Das ist voll die Sackgasse was mach ich nun ?


Gruß
Steffen

Heideltrudel
28.02.2007, 12:52
Es erscheint so als ob dein Ausgang immer auf Ein ist, wei der Prozessor so schnell ist. Weil das Auge träge ist. Dennoch wird der Ausgang geschaltet !!!
Erhöhe mal die Zeit in der der Prozessor warten soll. z.B. Wait 2 Dann wirst du sehen das der Prozessor sauber arbeitet und nach jedem durchlaufen der Schleife deinen Ausgang setzt und rücksetzt.
Jürgen

Steffen44
28.02.2007, 15:45
ne der Ausgang ist nicht immer auf ein ich habe jetzt mal die Zeit auf 4 Sekunden genommen.

Das Problem ist der Aufbau meines Programm :

Wie gesagt in der Schleife fragt das Programm den UART ab wenn die bedingung erfüllt ist und das Zeichen was ich aus dem Excel geschickt habe ausgewertet ist dann wartet er durch den Waitms Befehl noch 40ms bis er seinen Zustand wieder vergisst und mit der do loop Schleife von vorne beginnt.

Sowie ich einen waitms befehl in der schleife verwende funktioniert das ganze nicht mehr mit dem Port toggle.


Gruß
Steffen

Heideltrudel
28.02.2007, 18:13
Versuch es mal mit folgendem Befehl:



UART-Zeichen minus 48 ergibt das zu empfangene Zeichen ( z.B. eine 1 ) dieses Zeichen in A speichern.
Keine do Schleife !
statt dessen schreibst du If A = 1 Then toggle portx.1 If A = 2 then toggle oprtx.2 ...u.s.w. danach läßt du den uP wieder deine UART abfragen.

müßte eigentlich laufen !!! aber nur wenn deine Tastatur immer nur EIN Zeichen pro Tastendruck sendet !!!

Jürgen

Steffen44
20.04.2007, 13:43
so nachdem ich nun lange über mein Programm nachgedacht habe. Habe ich nun alles von vorne bis hinten nochmal neu aufgerollt im Programm und siehe da der Fehler war klar.

Das ganze Problem bestand daran das ich die Ausgänge durch ein anderen Code ständig neu beschrieben habe. Durch das ständige neue Beschreiben entstand der Zustand das der Ausgang ohne ende in einer extrem schnellen Impulsfolge flackerte.

Puhh was bin ich froh das nun gefunden zu haben.

Vielen Dank an alle die geholfen haben es war nicht umsonnst ;-)

Gruß
Steffen