Jump to content
Usertreffen 2024: 29.5.-2.6. | Anmelden bitte bis 30.4. ×
Schiffsmodell.net

arduino als Lichtsteuerung


Guest

Recommended Posts

Ich bin am überlegen, meine Lichtsteuerung selbst zu programmieren. Da ich ca. 30 Unterschiedliche LEDs auf 3 Masten verteilt habe und diese je nach Einsatzzweck in vorgeschriebener Konstellation leuchten/blinken müssen, brauche ich etwa 8-10 verschiedene Programme.

 

Da ich schon einige Programmiererfahrung mit anderen Sprachen habe, sehe ich die Aufgabe nicht als sehr schwer an. Das einzige was ich rausfinden muß ist, wie ich ein Signal vom Empfänger auswerten kann. Vielleicht ist dieses Modul ja etwas überpowert für mein Vorhaben, aber es ist einerseits jederzeit erweiterbar, umprogrammierbar und vor allem weitaus günstiger als ein fertiges Lichtmodul. Dieses Board gibts in der Bucht schon ab 18€, Normalpreis so um die 30 in deutschen Landen.

 

Hat jemand von euch schon Erfahrungen damit gesammelt? Die Möglichkeiten sind ja grenzenlos.. bis hin zur automatischen Lichtsteuerung wenn es dunkel wird (mit Dämmerungsschalter), Steuerung der Lenzpumpe (mit Feuchtigkeitssensor), ...

 

Info's zu Arduino gibts unter http://www.arduino.cc/

Link to comment
  • Replies 58
  • Created
  • Last Reply

Top Posters In This Topic

  • Kessl

    9

  • hoppppla

    6

  • lab

    4

Top Posters In This Topic

Posted Images

Guest LostInSpace

Hi,

wahrscheinlich mache ich mir mit dem Posting noch mehr "Feinde", aber ...

 

Ich bin am überlegen, meine Lichtsteuerung selbst zu programmieren.

Eine gute und wirklich sinnvolle Idee.

 

Da ich schon einige Programmiererfahrung mit anderen Sprachen habe, sehe ich die Aufgabe nicht als sehr schwer an.

Das ist relativ. Die Frage ist doch, ob Du im Stande bist, die Aufgabenstellung so strukturiert zu beschreiben, das Du sie in einer fast beliebigen Sprache auf einem fast beliebigen System zum laufen bekommst (ein langer Satz, ich weiß).

 

Das einzige was ich rausfinden muß ist, wie ich ein Signal vom Empfänger auswerten kann.

Das sagt mir, das deine Erfahrungen evtl doch noch nicht so groß sind. In der Sprache C braucht man für zB einen Atmega88 ca 15 Zeilen Code. Und es gibt viele Möglichkeiten, das Signal einzulesen.

 

.. Die Möglichkeiten sind ja grenzenlos.. bis hin zur automatischen Lichtsteuerung wenn es dunkel wird (mit Dämmerungsschalter), Steuerung der Lenzpumpe (mit Feuchtigkeitssensor), ...

Ach, wie Recht Du hast. Das kann eine endlose Spielwiese werden. Daher ist es auch wichtig, das ganze möglichst flexibel aufzubauen.

 

Info's zu Arduino gibts unter http://www.arduino.cc/

Nun, das Modul scheint für Leute zu sein, die wenig von Hardware und Programmierung verstehen. Mikrocontroller in Bascom, dieses Ardunio??, oder andere "abstrakte" Sprachen sind immer eine Krücke. Gerade bei Dingen, für die es keine direkten Befehle gibt, geht das Elend los. Warum nicht gleich direkt in C programmieren?

 

 

Mein Vorschlag.

Nimm einen Mega88 oder 32. Lerne C und baue mittels "Hühnerfutter" Treiber für die Lampensteuerung.

 

So, nun steinigt mich.

Link to comment
Guest Lupus

Ich hatte eine ähnliche Überlegung auch schon und mich ein klein wenig in Arduino eingelesen.

 

Damaliges kurzes googlen ergab, dass es den Befehl http://www.arduino.cc/en/Reference/PulseIn gibt. Damit kann man wohl das Singal auslesen.

 

Leider habe ich noch kein Arduino um das ganze mal auszuprobieren. Wenn du das Ganze mal getestet hast, kannst du ja mal schreiben, ob das gut funktioniert. Werde mir wohl in ein oder zwei Monaten auch mal ein Ardunio besorgen. Scheint alles schön einfach zu funktionieren.

Link to comment
[...]

Damaliges kurzes googlen ergab, dass es den Befehl http://www.arduino.cc/en/Reference/PulseIn gibt. Damit kann man wohl das Singal auslesen.

[...]

 

Der Beschreibung nach wird das nicht funktionieren: 10ms als minimale Pulsdauer ist schon viel zu lang, die Pulsdauer bei Mittenstellung ist ca. 1,5ms. An den Endanschlägen ca. 1ms bzw. 2ms, wird also mitm Rückgabewert auch nicht funktionieren.

Link to comment
Guest willie

Also, einen Kanal auszuwerten ist super simpel. Das geht ganz einfach so:

 

zunächst die Variable:

word RcValue = 0; // RC Channel us impulse length (e.g. 1000..1500..2000)

Dann in der Setup Routine den Interrupt zuweisen, ACHTUNG 0 bedeutet Pin 2 und 1 bedeutet Pin 3:

 

// init RC reciver
attachInterrupt(0, RcIntHandler, CHANGE);

Der eigentliche Interrupthändler:

 

void RcIntHandler() {
 static unsigned long RcTemp = 0;
 if ( digitalRead(2) ) { 
   RcTemp = micros(); 
 } 
 else {
   RcValue = micros() - RcTemp; 
 }
}

Im Hauptprogramm kannst du jetzt den aktuellen Wert mit der Variablen RcValue abrufen.

 

Was passiert ist folgendes,

An jeder Flanke an Pin 2 wird der IntHändler angesprungen. Bei einem High wird in einer temporären Variablen die aktuelle Anzahl der Microsekunden gespeichert. Bei fallender Flanke wird dann die Länge berechnet und in die RcValue Variable gespeichert.

Das funktioniert ganz gut, nur wenn die Long einen Überlauf hat, gibt's mal einen kurzen Fehlimplus. (ca. alle 9,9 Stunden...)

Der Wert von RcValue muss, wenn der Impuls richtig anliegt zwischen 1000-2000 liegen. Das sind schon die richtigen micro sekunden.

Alle anderen Werte sind fehlerhaft.

Link to comment

Der Vorteil des Arduino ist, dass er sehr einfach zu programmieren ist und es viele Tutorials und Quellen gibt. Für die Verarbeitung von RC-Signalen gibt es sowohl Bibliotheken als auch Anleitungen im Netz.

 

Außerdem lässt er sich über USB programmieren, man braucht also keine Extra-Hardware zum "Flashen".

 

Nachteil ist mMn. der hohe Preis. Letztlich zahlst Du zwischen 20 und 30 Euro für etwas, das auch mit einem Mikrocontroller für 1 Euro 50 machbar ist...

 

Gruß, Kai

Link to comment

Hallo,

 

Außerdem lässt er sich über USB programmieren, man braucht also keine Extra-Hardware zum "Flashen".

das relativiert sich doch ganz schnell, wenn man das hier liest:

Nachteil ist mMn. der hohe Preis. Letztlich zahlst Du zwischen 20 und 30 Euro für etwas, das auch mit einem Mikrocontroller für 1 Euro 50 machbar ist...

Ein einfacher Programmer für AVRs kostet auch so um die 20, 30 Euro..

Und Code-Beispiele für RC-Signalauswertung gibts glaub für so ziemlich jede denkbare Programiersprache :)

Ich persönlich bevorzuge C, da man da (mal abgesehen von Assembler) doch noch am ehesten an der Hardware ist.

 

viele Grüße,

Hermann

Link to comment
Guest willie
Hallo,

...

Ein einfacher Programmer für AVRs kostet auch so um die 20, 30 Euro..

Und Code-Beispiele für RC-Signalauswertung gibts glaub für so ziemlich jede denkbare Programiersprache :)

Ich persönlich bevorzuge C, da man da (mal abgesehen von Assembler) doch noch am ehesten an der Hardware ist.

 

viele Grüße,

Hermann

Ein einfacher Programmer kostet ca. 5€. Ich hab eigentlich alles da, einen richtig guten Programmer (für über 100€) C und Assembler, ja sogar richtiges echtes Pascal, was auch noch fast so schnell ist, wie Assembler. (AVRco...)

Trotzdem bin ich auch beim Arduino dabei. Es geht einfach deutlich schneller. Die IDE ist etwas hakelig, Arduino ist ja auch nur ein Makrocompiler, aber eigentlich funktioniert alles einwandfrei. Mit dem richtigen Programmer hab ich auch schon etliche AVR's gehimmelt, weil ich mal wieder die falschen Fuses programmiert habe. 2-3 pro Projekt sind es eigentlich immer. Auch das rechne ich mit ein. Und letzendlich ist die Entwicklung mit Arduino einfach schneller. Meine persönliche Zeit ist mir auch was wert. Und zwar mehr als so ein paar Chips. Solange ich die Sachen nicht in Serie fertige, ist das m.M. nach auch wurscht.

Wenn mal was in Serie geht, dann kann ich das ganze immer noch in Bytecode umwandeln und direkt flashen. Hab ich schon gemacht, geht sogar ohne Arduinoboard.

Deswegen: Leben und leben lassen. Für den Einstieg ist Arduino ideal, für den ab und zu Programmierer auch. Wer sich ernsthaft damit beschäftigen will, kann später immer noch umsteigen.

Link to comment

Hallo Kai,

 

Nachteil ist mMn. der hohe Preis. Letztlich zahlst Du zwischen 20 und 30 Euro für etwas, das auch mit einem Mikrocontroller für 1 Euro 50 machbar ist...

Gruß, Kai

genau das sind immer diese Falschaussagen.:nein:

Alleine mit dem Chip machst Du überhaupt nichts!

Den kannst nicht einmal programmieren.

Du brauchst noch jede Menge Kleinkram.

Platine hast auch noch nicht.

Wenn dann Deine eigene Entwicklung für 1,50€ hinbekommst, kaufe ich sie Dir gleich ab.:D

Jede eigene Entwicklung von mir wird immer teurer als wenn ich ein ähnliches Serienprodukt kaufe.

Meistens kostet schon die nackte Platine in vergleichbarer Qualität mehr.

 

Gruss

 

Gerd

Link to comment

@Bluewater

Ich habe nicht geschrieben, dass das ganze Projekt 1,50 kostet, sondern, dass man viele Projekte auch mit einem "Mikrocontroller für 1,50" umsetzen kann. Also bitte etwas Zurückhaltung mit Begriffen wie "immer diese Falschaussagen".

 

Auch beim Arduino benötigst Du in den meisten Fällen externe Beschaltung und wenn es sauber aufgebaut sein soll eine Platine.

 

Wenn Du viele Projekte hast, macht es schon einen Unterschied, ob Du einmal einen Flasher brauchst und dann nur die Chips für 1-2 € oder eben jedesmal einen komplette Arduino verbastelst. Für eine Lichtsteuerung wäre mir das zu teuer und zu klobig und nicht nötig. Wenn Geld und Platz keine Rolle spielen, kann man gern einen Arduino nehmen - zum Einstieg ist das sicher nicht schlecht. As gibt aber eben auch Alternativen.

 

Gruß, Kai

Link to comment
Peter_S_aus_O

Ich hoffe, ihr habt mit der SuFu auch mal kurz in den Nebenthread reingeschaut:

http://www.schiffsmodell.net/showpost.php?p=441160&postcount=22

 

 

Mit der zusätzlichen Beschaltung und Platine hast du sicher recht, ein wenig mehr als Hühnerfutter ist schon notwendig. (mein AtMega ist sicher keine 10% an den Kosten beteilig..)

 

Zum Thema "klobig":

Hängt sicher ab, wieviele ports man benötigt. Ein kleiner Prozessor + ein zusätzliches Schiebregister oder so, braucht auch seinen Platz. Natürlich ist der Ardi als huckepack-Lösung auf Lochraster nix für Slow-flyer, aber in einem Schiff dürfte für so was doch immer noch Platz sein.

(Meine Platine ist mit 6x6cm auch nicht gerade klein. Das ist allerdings den Klemmen und Kühlflächen der FETs geschuldet. )

 

Für eine einmalige Anwendung (wie sie Matze777 ja eigentlich vorhat), sehe ich den Ardi schon noch als vernünftige Lösung an. Zumal dann nicht nochmal ein Adapterkabel auf dem Schreibtisch rumliegt...

 

Peter

 

PS

Ja, ich hab auch schon mit den Ardis rumgespielt ;-)

Link to comment
Hellmut Kohlsdorf

Unser Torsten hat einen guten Einführungskurs für Atmel Controller mit den dazugehörigen kleinen Programmen hier veröffetlicht. Da gehört auch das Dekodieren des Signals von einem Empfänger dazu. Auch wie man ein Minimalsystem aufbaut. In Summe eine Art „Legokasten” mit dem man sich die Dinge die man möchte recht leicht und anschaulich zusammenbasteln kann. Torsten zeigt wie man schon mit einer kleinen Lochplatine und Verdrahtung von Hand auf der Rückseite die Hardware aufbaut. Da kann man eine Schaltung, wie hier benötigt schnell und billlig aufbauen. Einen passenden Lötkolben und Lötzinn bekommt man schon sehr billig. Ist man dann auf den Geschmack gekommen, dann kann man immernoch aufrüsten! Last, but not least. man kann seine Fragen hier stellen und bekommt sicher qualifizierte Antworten!

Edited by Hellmut Kohlsdorf
Link to comment

Sehr empfehlenswert finde ich das Atmel Evaluations Board von Pollin. Es kann verschiedene Atmel-Controller aufnehmen und hat den seriellen Programmieradapter gleich on Board. Gibt´s auch als Fertigmodul für ein paar Teuronen mehr. Bei Pollin gibt´s auch günstige Displays, die sich sehr leicht mit den Controllern ansprechen lassen.

 

Eine billigere Entwicklungsumgebung mit professioneller Platine ist mir für die Atmels nicht bekannt...

 

RC-Kanal auslesen -> siehe Link von Hellmut, oder hier mal ein einfaches Programm dafür in Bascom:

 

'******************************************************
'Projekt: Atmel-Programmierung für Einsteiger
'
'Prozessor: ATMega 32
'Bascom-Version: 1.11.8.1
'
'Programm 7: R/C_Kanal einlesen
'
'Hardware:
'R/C-Kanal an D.2 (INT0)
'LED an C.0
'LED an C.1
'LED an C.3
'
'10.02.2006 T. Gietenbruch
'
'******************************************************

'======================================================
'System-Einstellungen
'======================================================
'Definition für Mega 32
$regfile "m32def.dat"

'Angabe der Taktfrequenz (8Mhz)
$crystal = 4000000


'======================================================
'Konfigurationen
'======================================================

'Konfiguration der I/O-Ports´s
Config Portc = Output
Config Portd = Input

'Konfiguration des Timer1
Config Timer1 = Timer , Prescale = 1

'Konfiguration des INT0
'Interrupt bei jedem Flankenwechsel (0->1 und 1->0)
Config Int0 = Change

'======================================================
'Deklarationen
'======================================================

Dim Reading As Bit
Dim Rc_value As Word
Dim Error As Bit

'======================================================
'Initialisierungen
'======================================================

'Zuweisung der Interrupt-Service-Routinen
On Int0 Rc_read
On Timer1 Rc_error

'Timer-Freigabe
Enable Timer1
Stop Timer1

'Freigabe der Interrupt-Routinen
Enable Int0
Enable Interrupts

'Ports initialisieren
Portc = &B11111111


'======================================================
'Hauptprogramm-Schleife
'======================================================

Do

'LED an bei Fehler (Timer-Überlauf)
Portc.2 = Not Error

If Reading = 0 Then

'Hier Dein Nebenprogramm während der langen Lesepause
' Z. B. zur Anzeige/Verarbeitung des RC_value-Wertes

End If
Loop

'Programmende (nur formal)
End

'======================================================
'ISR für INT0 - R/C-Kanal lesen
'======================================================
Rc_read:
'Den Timer starten mit steigender Flanke
If Reading = 0 And Pind.2 = 1 Then
  Start Timer1
  Reading = 1
  Toggle Portc.0
'Den Timer stoppen mit fallender Flanke
Else
  Stop Timer1
  Rc_value = Timer1
  Timer1 = 0
  Reading = 0
  Toggle Portc.1
End If
'Error-Bit rücksetzen
Error = 0
Return

'======================================================
'ISR für Timer1 - Fehlerhandling
'======================================================
Rc_error:
'Error-Bit setzen
Error = 1
Reading = 0
Stop Timer1
'FailSafe-Wert für Rc_Value (auskommentiert)
'Rc_value = 6300

Return

Edited by Torsten
Link to comment

Hallo

Frage wg. obigen Programm.

Wieso Taktfrequenz von 4 000 000 bei 8 Mhz.

 

Zu Arduino:

Meines wissend nach kann man sich den Bootloader vom Arduino kostenlos holen. IDE ist auch frei.

Ergo, ein Arduino kostet auch nur "1,50" Euro und Huennerfutter :bäh:

 

KR

Link to comment
Hellmut Kohlsdorf

Naja, KR, das stimmt wenn du schon alles zum Erstellen einer solchen Platine hast und nur die Verbrauchsgüter zusammenzählst. Zwar nicht 1,50 Euro, aber auch nicht viel mehr.

Wenn du aber bei "0" anfängst, dann ist es schon ein wenig teurer!

 

@Nikolaus: Wenn du den internen Taktgeber im Controller verwendest, dann ist es nicht sinnlos die Frequenz so niedrig wie möglich zu betreiben, solange die Auflösung des Zählers reicht die gewollte Auflösung der Signale vom Empfänger zu dekodieren. Niedrigere Frequenz impliziert geringeren Stromverbrauch (eigentlich vernachlässigbar), geringere Auflösung der Dekodierung und eben auch geringere Zählergröße benötigt. Du kannst das natürlich auch mit einen Xmega mit 30 MHz betreiben, aber wozu?

Link to comment
Guest willie

Man sollte vielleicht auch noch dazu sagen,

daß man auch den internen RC Oszilator verwenden kann. Dann kann man sich auch noch den ext. Quarz schenken. Intern gehen bei den Megas 1,2,4,8 MHZ, die neueren Tiny's haben "nur" 8Mhz und 6.4MHz (Wobei die noch duch 4 geteilt wird), kleiner Tiny's haben 1.6MHz. Wie man's möchte. Ist zwar nicht so genau, aber ich glaube zum Pulse messen reicht das völlig. Selbst die 1,6MHz.

 

Naja, der Bootloader muss ja irgendwie in den Chip rein. Also brauchste einen Programieradapter. (5€) Und dann brauchste noch einen Seriell zu USB wandler für's programmieren... Also ich würd eher einen kompletten Arduino kaufen. Der kostet auch nur 20€. Oder einen "alten" Arduino Duemilanove. Da gib's auch schon recht viele Nachbauten die unter 20€ zu bekommen sind. Da kannste dann auch den Chip fertig programmieren, raushebeln und in eine andere Platine stecken. Du mußt nur irgendwie die 16MHz erzeugen.

Link to comment

...

Frage wg. obigen Programm.

Wieso Taktfrequenz von 4 000 000 bei 8 Mhz.

...

 

Weil diese Einstellung bei dem gewählten Timer auch ohne weiteres Prescaling sichere Ergebnisse bringt.

 

Für etwas mehr Rumgetue mit dem RC-Signal reicht die Frequenz auch noch locker aus.

 

Das Ganze sollte halt möglichst einsteigerfreundlich sein...

 

Grüße

 

Torsten

Link to comment

Hallo

 

ja, ich gebe meinen Vorschreibern recht.

 

Was ich nur damit ausdruecken wollte ist, das der Arduino auf keinen Fall teurer ist als eine vergleichbare Loesung.

 

Weil Bauteile , Platine, Zusammenbau etz. wird man kaum preiswerter hinbekommen.

Wenn man dann noch die Garantie/Regress/Gewaehrleistungs Ansprueche einiger Kunden dazurechnet ........

 

(Mwst, EU-Recht, Ruecknahmeverflichtung, Fukushima,PKW-Maut etz. usw)

 

Bei mir heist KR = Kindly regards

 

In dem sinne

 

KR

Link to comment
Hallo

Zu Arduino:

Meines wissend nach kann man sich den Bootloader vom Arduino kostenlos holen. IDE ist auch frei.

Ergo, ein Arduino kostet auch nur "1,50" Euro und Huennerfutter :bäh:

KR

 

Aha. Und ein "Arduino" ohne Platine und ohne Bootloader ist was? Richtig - ein ATMegaX Mikroprozessor... Nun muss man nur noch den heruntergeladenen Bootloader in den "nackten Arduino" bekommen...

Link to comment
Der Beschreibung nach wird das nicht funktionieren: 10ms als minimale Pulsdauer ist schon viel zu lang, die Pulsdauer bei Mittenstellung ist ca. 1,5ms. An den Endanschlägen ca. 1ms bzw. 2ms, wird also mitm Rückgabewert auch nicht funktionieren.

Lesen will gelernt sein. Da steht 10 MICROseconds, das sind 0,01 millisekunden. PulseIn ist exakt für diese Aufgabe gemacht und beherschit sie perfekt.

 

Mit PulseIn eine Fernsteuerung auszulesen ist im Prinzip ein Einzeiler:

int rc_pin_1 = 2, rc_pin_2 = 4, rc_pin_3 = 7;
int rc_wert_1 = 0, rc_wert_2 = 0, rc_wert_3 = 0;
void rc_read(){
 int wert_1, wert_2, wert_3;
 wert_1 = pulseIn(rc_pin_1, HIGH);
 wert_2 = pulseIn(rc_pin_2, HIGH);
 wert_3 = pulseIn(rc_pin_3, HIGH);
}

 

Gegebenenfalls noch die Werte etwas anpassen:

void rc_read(){
 int wert_1, wert_2, wert_3;
 wert_1 = pulseIn(rc_pin_1, HIGH);
 wert_2 = pulseIn(rc_pin_2, HIGH);
 wert_3 = pulseIn(rc_pin_3, HIGH);
 if(wert_1 < 500 || wert_1 > 3000) rc_wert_1 = 90; //Bei total unrealistischen Signalen die Servos in die Mitte fahren
 else if(wert_1 < 990) rc_wert_1 = 0; //Den Min Wert etwas vergrößern
 else if(wert_1 > 1950) rc_wert_1 = 180; //Den Max Wert etwas vergrößern
 else if(wert_1 < 1570 && wert_1 > 1400) rc_wert_1 = 90; //Den Mittelpunkt etwas vergrößern
 else rc_wert_1 = map(wert_1, 990, 1950, 1, 179); //Normalfall
}

 

Der Arduino ist die perfekte Lösung für das genannte Problem mit einer Lichtersteuerung, ich würde aber empfehlen sich gleich mit diesem Schätzchen vertraut zu machen, damit schaltet man 12V Bordspannung bis 500 ma und kann sogar induktive Lasten wie Relais problemlos und sicher schalten.

 

Gruss

Link to comment
Guest willie

Ja, stimmt, für 'ne Lichtsteuerung reicht das bestimmt. Ich hatte mit dem PulsIn immer das Problem, das man in der Zeit nix anderes machen kann.

PulsIn wartet bis zum Beenden des Pulses oder der Timeoutzeit.

d.h. bis zu 20ms pro Kanal passiert da nix. Und wenn mal ein Puls ausfällt, wartet man immer die Timeoutzeit.

Deswegen konnte ich den für meine Starteruhr nicht verwenden. Wie gesagt, für's Licht reicht das bestimmt.

Link to comment
Hellmut Kohlsdorf

War dar im Zusammenhang mit dem Kurs zu Atmel Controller nicht mal was dazu statt Pulsein mit Interrupts zu arbeiten? Bei den moderneren Atmel Controller gibt es das Pin Change Interrupt. Wechselt der Pegel an einem der Pins eines Ports, ein Port kann bis zu 8 Pins haben und/oder dafür verwenden, dann wird ein Interrupt ausgelöst. Das Programm kann dann intern den Zählererwert holen, abfragen an welchen Pin der Pegelwechsel stattfand und so ähnlich zu Pulsein die Pulselänge erfahren. Das aber z.B. gleich bei bis zu 8 Kanälen! An Willie vorweg, der 169 kann mit bis zu 20Mhz betrieben werden, wodurch der "Fehler" bei dieser Methode minimal ist, weil für den Controller alles unwahrscheinlich langsam passiert, wenn man es in Takte übersetzt!

 

Das Warten und Blockieren des Controllers wie bei Pulsein entfällt dadurch und man kann viel mehr Kanäle abfragen!

Link to comment

Ja, interrupts sind fraglos schöner, sie können aber mehr Probleme verursachen als lösen wenn man nicht wirklich genau weiß was sie machen. Wird bei Signalfalttern während eines interrupts ein weiterer aufgerufen und noch noch bevor der abgehandelt wurde der nächste ist irgendwann schluss und der mc wird nur noch ein rotes Lichtchen zeigen. Wer mit Interrupts umgeht sollte schon wissen wie er während eines interrupt handels weitere interrupts verhindert und er sollte auch wissen das diese handles kurz sein müssen und das sich z.B. andere Funktionen nicht ohne weiteres aus einem Handler heraus aufrufen lassen usw. usf.

 

Für Schiffe halte ich max. 40 ms Auszeit, selbst für die Steuerung, allemal für vertretbar und der Code ist definitiv übersichtlicher als ein interrupthandler, weil einfach linear. Wer das aber in schön sehen will darf mal einen Blick in die Software des Multiwii werfen. Die lesen die Kanäle (inzwischen) auch mit interrupts aus und das lässt sich praktisch 1:1 kopieren wenn daran interesse besteht. Es ging mir auch eigentlich nur darum zu sagen: Es funktioniert auch mir pulsein und es gibt einen Unterschied zwischen micro- und millisekunden. Aber ja, es geht eleganter.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.