na....es ist ja wieder sehr ruhig in diesem Thread geworden!
Für Modelleisenbahn habe ich schon 3 Projekte mit Atmels erstellt, aber für Helis
bin ich noch am überlegen.
In nen Logo500 oder Goblin500 wäre genug Platz für die Hardware.
ich mach meine Platinen lieber selbst, das ist problemorientierter als wenn man etwas fertiges hernimmt, was nicht genau dafür gedacht ist was man vor hat. Als Plattform zum programmieren nutze ich einfach das ganz normale Atmel AVR Studio, das ist gratis und funktioniert super.
Hi Steppo,
die Photos erinnern mich an ein KK-Bord für Quadro oder Tricopter!
es ist ja wieder sehr ruhig in diesem Thread geworden!
Also ich krieg den Krempel zum Geburtstag, falls meine Freundin die richtigen Knöpfe bei Amazon (billiger) erwischt.
By the way, ätzt man eigentlich Platinen immer noch mit Salzsäure und Wasserstoffperoxyd wie ich vor 30 Jahren als Kleinkind? Kann mich erinnern, es hat zwar super funktioniert, aber die Dämpfe haben alle Geräte verrosten lassen...
die Platine (vom Photo) glaube ich nicht an Selbstherstellung, die habe ich bei ebay
für ca. 15.-€ kommen lassen.
Heute fliegt mein Quadro, allerdings ohne GPS und Schnikschnak.
ja wir haben da Eisen(III)oxid-Bad für Prototypen, ist ganz nett, aber Chinahersteller sind immernoch günstiger und von der Qualität her viel besser... daher wart ich meist leiber noch ein monat länger und lass es auch China kommen...
Punkt 1: Ich habe nichts gegen Interrupts. Ich fand sie bei Arduino bisher lediglich größtenteils uninteressant, da es a) standardmäßig nur zwei Stück gibt und sie b) an bestimmte Pins gebunden sind. Aber das Bessere ist ja bekanntlich des Guten Feind, und nach ein wenig stöbern habe ich diese Library gefunden: PinChangeInt
Hiermit kann jeder beliebige Pin am Arduino zum Interrupt werden. Gleich mal ausprobiert, und eine ziemlich gut funktionierden Zeitmessfunktion für empfängersignale auf die Beine gestellt. Kleiner Nachteil ist bis jetzt, dass es nur auf den großen Atmega läuft, die kleinen Attiny habe ich noch nicht probiert. Mal schauen, vielleicht finde ich da ja auch noch etwas passendes. Aber jetzt erstmal zum spielen. Hier ein Mini-Script, zum Zeiten messen.
Nachdem man die ZIP-Datei geöffnet hat, wird der Verzeichnis 'PinChangeInt' in das 'libraries'-Verzeichnis im Arduino-Ordner kopiert. Danach das Programm starten. Unter "Libraries"dann PinChangeInt' anklicken, danach sollte das hier im Editor stehen:
Code:
#include <PinChangeInt.h>
Nun werden einige Variablen definiert. Ich bin ja ein Anhänger der eindeutigen Namen, dann liest sich der Code später fast wie ein (wenn auch etwas stotteriges ) Buch. Zunächst wird der Empfngerpin festgelegt (in diesem Fall Pin-Nr. 6). Danach wird der Zeitstempel definiert, wenn die Messung der Signallänge erfolgt und die Signallänge selbst. Da es sich beim Zeitepmpel um eine fortlaufende Messung handelt, muss hier 'unsigned long' als Variablentyp gewählt werden. Der eigentliche gemesse Zeitwert ist deutlich kleiner (<2500), daher genügt 'unsigned int'. Anschließend noch ein Boolscher Operator, der prüfen soll, ob die Zeitmessung gerade erfolgt, das war es hierfür.
Code:
byte pin_empfaenger = 6;
unsigned long zeit_signaldauer_start = 0;
unsigned int zeit_signaldauer = 0;
boolean aktiv_zeitmessung = false;
Nun geht es ans Setup. Hier noch unspektakulär. Zunächst wird der Empfänger-Pin als Eingang definiert, danach der Interrupt gesetzt. 'zeitmessung' steht hier für eine Unterfunktion, die noch definiert werden muss. Den Loop() lasse ich jetzt weg, dass bleibt ja vorerst jedem selbst überlassen, was er damit bezwecken will bzw. das zeige ich dann im Teil 2.
Hier jetzt die Unterfunktion 'zeitmessung'. Diese wird jetzt jedesmal aufgerufen, wenn der Interrupt einen steigenden oder fallenden Pegel feststellt. Zunächst wird gepüft, ob ein HIGH-Signal anliegt, und die Zeitmessfunktion noch nicht gestartet wurde. Trifft beides zu, wird der aktuelle Zeitstempel gesetzt, und der Boolsche-Operator auf True gesetzt.
Wenn der Interrupt erneut auslöst (tut er bei steigenden ud sinkenden Pegeln), wird dann geschaut, ob das Signal zu Ende ist und die Zeitmessung aktiv. Trifft beides zu, wird vom aktuellen Zeitstempel der Startwert abgezogen und man erhält die reine Signallänge vom Empfänger. Anschließend noch den Boolschen Operator für die Zeitmessung zurücksetzen und fertig. Bereit für das nächste Signal vom Empfänger.
Wer will, kann sich das über die serielle Konsole anschauen. Dabei wird er sehen, dass die Signaldauer um den Wert 4 schwankt. Das hat mit der Auflösung der micros()-Funktion zu tun, die bei 16Mhz bei 4µs liegt.
Soll uns aber weniger stören, da wir ja generell keine exakten Werte vergleichen, sondern meisten "größer gleich" bzw. "kleiner gleich".
Weiterer Nachteil: Die micros()-Funktion erzeugt nach ca. 70min einen ßberlauf und springt auf 0 zurück. Das kann man mit etwas Porgrammieraufwand abfangen. Andererseits: Welcher Heli beibt schon über eine Stunde am Stück in der Luft?
Guten Morgen,
ich würde gerne noch einige Basics in Erfahrung bringen.
Ich habe mein Arduino Mini Pro und den passenden 5V FTDI Programmer aus nem alten Wii Copter reaktiviert.
1. Programmer: dieser FTDI kommuniziert ja über TX und RX mit Pin 0 und 1 des Arduino.
Ist das eigentlich nur ein USB zu seriell Wandler oder wird da noch was gemacht?
Ist das ein normales RS232 seriell Signal was hier gesendet und empfangen wird?
Könnte man dann auch ein normales seriell Kabel verwenden?
2. ATMega328: einen Atmel 328 mit Arduino Bootloader kann ich somit direkt auch mit dem FTDI Programmer programmieren?
Kann ich einen nackten 328 auch mit RX und TX Bootloadern und Scetchen oder muss hier der Bootloader erst über MOSI MISO "geflasht" werden und erst wenn der Bootl. drauf ist weiß er über Seriell was an zu fangen?
3. ATMega 8: kann ich mit Heikos Methode auch einen AT Mega 8 mit Arduino bespielen?
Zu 4: Das sollte funktionieren. Der Atmega328 sitzt auf dem Uno und dem Mini Pro, insofern kein Problem. Der FTDI-Chip übernimmt ja nur die "ßbersetzung" vom USB->Serial, was beim Uno ein entsprechender Chip auf der Platine macht.
Wir verarbeiten personenbezogene Daten über Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen, Werbung zu personalisieren und Websiteaktivitäten zu analysieren. Wir können bestimmte Informationen über unsere Nutzer mit unseren Werbe- und Analysepartnern teilen. Weitere Einzelheiten finden Sie in unserer Datenschutzrichtlinie.
Wenn Sie unten auf "Einverstanden" klicken, stimmen Sie unserer Datenschutzrichtlinie und unseren Datenverarbeitungs- und Cookie-Praktiken wie dort beschrieben zu. Sie erkennen außerdem an, dass dieses Forum möglicherweise außerhalb Ihres Landes gehostet wird und Sie der Erhebung, Speicherung und Verarbeitung Ihrer Daten in dem Land, in dem dieses Forum gehostet wird, zustimmen.
Kommentar