Forum

Einloggen | Registrieren | RSS  

olit(R)

E-Mail

Berlin,
13.04.2021,
15:27
(editiert von olit
am 13.04.2021 um 16:12)


@ bigdie

CCBASIC for...next ?

» » Ich habe bisher nur den kleinen Achtbeiner Programmiert (Unit-Micro)
» » Mit meinem Sohn haben wir zwei größere Projekte realisiert. Da war ich
» aber
» » nur der Hartware Fritze.

» Ich versuche mich auch mit solchem Kram. Hab schon immer mal probiert, aber
» meist nach der blinkenden LED wieder in die Ecke geworfen.
» Was mir entgegen kommt, ist so eine Art Multitaskingfähigkeit. Man kann
» also je nach Prozessor z.B. 8 Programmschleifen parallel ablaufen lassen.

Die Dinger die ich einsetze sind leider nicht Multitaskingfähig.
Da stieß ich auf das Problem, dass ich eine Zeitverzögerung benötigte aber gleichzeitig zwei Fotosensoren der Schranke im Auge behalten musste.

#Abwarten ' rund 0,6s Abwarten ob es nur eine kurze Freigabe zwischen den Beinen war, bzw. die Person zurückging.
For z=0 to 255
If Strahl=off then warten
next ' Da z nur ein Byte hat, muss die For-Next Schleife 6*255=1530 mal durchlaufen werden
For z=0 to 255
If Strahl=off then warten
next
For z=0 to 255
If Strahl=off then warten
next
For z=0 to 255
If Strahl=off then warten
next
For z=0 to 255
If Strahl=off then warten
next
For z=0 to 255
If Strahl=off then warten
Next
………….

Aber das ist eben nicht korrekt.
Eine saubere Lösung würde so aussehen.

#Abwarten 'rund 0,6s Abwarten ob es nur eine kurze Freigabe zwischen den Beinen war, bzw. die Person zurückging.
z1=0 : z2=0
#Wiederholen
z1=z1+1
if Strahl=off then warten
if Z1<255 then wiederholen '1. Wiederholungsschleife 255 mal
z1=0: Z2=z2+1
if z2<6 then wiederholen '2. Wiederholungsschleife 6 mal
………….

Eine andere nicht korrekte Lösung würde so aussehen.

#Abwarten
for z1=0 to 255
for z1=0 to 255
for z1=0 to 255
for z1=0 to 255
for z1=0 to 255
for z1=0 to 255
If Strahl=off then warten ' Raus springen verboten :-(
next
next
next
next
next
next
……………

Und um einen 100ms Steuerimpuls für ein Stromstoßrelais zu kreieren, ohne die Sensoren aus den Augen zu lassen, musste ich ein 555 Monoflopp außerhalb des µC installieren.

Schaltung mit Programm:
http://www.elektronik-kompendium.de/forum/forum_entry.php?id=249947
Schaltung Sendediode:
http://www.elektronik-kompendium.de/forum/forum_entry.php?id=226716&page=0&category=all&order=time

Lupus

13.04.2021,
16:31

@ Lupus

OT Bilder

» » Hallo Olit,
» »
» » Sehr interessantes Projekt. Mein Respekt an Dich und Deinen Sohn!
» » Nur eine Kritik muss ich loswerden.
» » Die Fotos gehören dazu und sind keineswegs OT! :ok: :cool:
»
»
» Kann ich mich da nur anschließen - Hut ab!

Itzlbritzl(R)

13.04.2021,
22:16

@ olit

CCBASIC for...next ?

»
» Und um einen 100ms Steuerimpuls für ein Stromstoßrelais zu kreieren, ohne
» die Sensoren aus den Augen zu lassen, musste ich ein 555 Monoflopp
» außerhalb des µC installieren.
»

Bau dir die Software als kooperatives System. Also jede Aufgabe benötigt nur eine definierte Zeit und dann gibt sie an die nächste Aufgabe ab. Etwa so:

Warte bis neue Millisekunde

'task 1
If Steuerimpuls > 0 then
Relais = an
Steuerimpuls = Steuerimpuls - 1
Else
Relais = aus
End

'task 2
If anything do
Something
End

Die 1ms kannst du auch weiter runter teilen in Aufgaben, die nur alle x MS laufen sollen.

Musst halt sicherstellen, dass kein Task zu lange dauert. Sonst über einen Zustandsautomaten aufteilen.

Etwa so:

'task 1a
If task = 1 then
Blabla
End

If task = 2 then
Blubblub
End

Task = task + 1
If task > 2 then task = 1

bigdie(R)

14.04.2021,
03:07

@ olit

CCBASIC for...next ?

Wie gesagt, ist für meinen Geschmack einfacher, dann kann man in einer Schleife Eingänge z.B Taster abfragen ohne das man die länger drücken muss. Solche Zeitgeschichten kommen in eine andere Schleife. Da kann man dann auch mal 1s warten ohne eine Eingabe zu verpassen. Früher hat man eilige Sachen mit Interrupts gemacht, wenn ich mich an Assembler mit dem Z80 Erinnere. Geht heute wohl auch noch, Vermutlich macht das die Picaxe Software unter der Oberfläche auch auf diese Art. Für mich ist das jedenfalls so einfacher und besser strukturierbar. Aber ich bin da auch nur blutiger Anfänger.

Aber ich glaube so was wie die Schildkrötenfarm hätte ich wahrscheinlich eher mit einer Siemens Logo oder anderer SPS gemacht. Das programmiert sich für mich deutlich einfacher und man kann auch besser simulieren und auch live im Betrieb gut am Rechner sehen was passiert und das alles ohne Code sondern grafisch.
Wenn Siemens mal eine Logo Nano bauen würde Formfaktor wie Arduino Nano aber mit Logosoft programmierbar, dann würde ich mich mit solchem Code Kram sicher nicht mehr beschäftigen.;-) Wobei so einfache Zeitgeschichten mit so einem 8-Beiner Picaxe als Ersatz für einen 555 mit ein paar zusätzlichen Funktionen ist schon nicht übel. Aber oft hat man dann auch wieder zusätzlichen Aufwand bei der Spannungsversorgung. Den 555 kann man z.B. direkt an 12V Kfz Bordspannung benutzen. für den Picaxe brauchst du 5V oder weniger und das auch an allen Eingängen.

olit(R)

E-Mail

Berlin,
14.04.2021,
09:54

@ Itzlbritzl

CCBASIC for...next ?

» »
» » Und um einen 100ms Steuerimpuls für ein Stromstoßrelais zu kreieren,
» ohne
» » die Sensoren aus den Augen zu lassen, musste ich ein 555 Monoflopp
» » außerhalb des µC installieren.
» »
»
» Bau dir die Software als kooperatives System. Also jede Aufgabe benötigt
» nur eine definierte Zeit und dann gibt sie an die nächste Aufgabe ab. Etwa
» so:
»
» Warte bis neue Millisekunde
»
» 'task 1
» If Steuerimpuls > 0 then
» Relais = an
» Steuerimpuls = Steuerimpuls - 1
» Else
» Relais = aus
» End
»
» 'task 2
» If anything do
» Something
» End
»
» Die 1ms kannst du auch weiter runter teilen in Aufgaben, die nur alle x MS
» laufen sollen.
»
» Musst halt sicherstellen, dass kein Task zu lange dauert. Sonst über einen
» Zustandsautomaten aufteilen.
»
» Etwa so:
»
» 'task 1a
» If task = 1 then
» Blabla
» End
»
» If task = 2 then
» Blubblub
» End
»
» Task = task + 1
» If task > 2 then task = 1

Die beiden Fototransistoren sind 10mm auseinander.
Ich muss aber die Reihenfolge der Unterbrechung auswerten. Da ist mit warten nichts zu machen. Der Weitbefehl des kleinen µC hat ein 20ms Takt.

olit(R)

E-Mail

Berlin,
14.04.2021,
10:01
(editiert von olit
am 14.04.2021 um 10:19)


@ bigdie

CCBASIC for...next ?

» Wie gesagt, ist für meinen Geschmack einfacher, dann kann man in einer
» Schleife Eingänge z.B Taster abfragen ohne das man die länger drücken muss.
» Solche Zeitgeschichten kommen in eine andere Schleife. Da kann man dann
» auch mal 1s warten ohne eine Eingabe zu verpassen. Früher hat man eilige
» Sachen mit Interrupts gemacht, wenn ich mich an Assembler mit dem Z80
» Erinnere. Geht heute wohl auch noch, Vermutlich macht das die Picaxe
» Software unter der Oberfläche auch auf diese Art. Für mich ist das
» jedenfalls so einfacher und besser strukturierbar. Aber ich bin da auch nur
» blutiger Anfänger.
»
» Aber ich glaube so was wie die Schildkrötenfarm hätte ich wahrscheinlich
» eher mit einer Siemens Logo oder anderer SPS gemacht. Das programmiert sich
» für mich deutlich einfacher und man kann auch besser simulieren und auch
» live im Betrieb gut am Rechner sehen was passiert und das alles ohne Code
» sondern grafisch.
» Wenn Siemens mal eine Logo Nano bauen würde Formfaktor wie Arduino Nano
» aber mit Logosoft programmierbar, dann würde ich mich mit solchem Code Kram
» sicher nicht mehr beschäftigen.;-) Wobei so einfache Zeitgeschichten mit
» so einem 8-Beiner Picaxe als Ersatz für einen 555 mit ein paar zusätzlichen
» Funktionen ist schon nicht übel. Aber oft hat man dann auch wieder
» zusätzlichen Aufwand bei der Spannungsversorgung. Den 555 kann man z.B.
» direkt an 12V Kfz Bordspannung benutzen. für den Picaxe brauchst du 5V oder
» weniger und das auch an allen Eingängen.

Der Achtbeiner hat kein Interrupt.
Die Spannungsversorgung ist in diesem Fall sowieso etwas heikel. Die Schaltung wird über das Stromstoßrelais versorgt. Und für den Schaltimpuls werden die beiden Adern kurzgeschlossen. In der Zeit muss die Schaltung vom Ladeelko versorgt werden.

Man kann das Problem auch Hartware mäßig lösen.
http://www.elektronik-kompendium.de/forum/forum_entry.php?id=249942&page=0&order=time&descasc=desc&category=all