Hi Entschuldigt den x-ten Kaufberatungsthread, aber meine Ausgangslage ist etwas speziell. In Sachen Mikrocontroller habe ich bisher erst ein paar kleine Projekte mit Arduino gemacht. Mit Arduino komme ich aber in einem neuen Projekt an die Grenzen, weil von Haus aus die Eingänge des Atmega nur analog nutzbar sind, ich aber zwei PWM-Signale (gleichzeitig) erfassen und verarbeiten muss. Nun suche ich ein neues Starter-Kit. Ein Kollege von mir, der an einem ähnlichen Projekt sitzt, hat ein myAVR Board MK2 gekauft und programmiert mit BASCOM. Ich habe mir daher gedacht, dass ich am besten auch dieses Board und diese Sprache verwende, damit wir uns gegenseitig unterstützen können. Fragen: - Ist dagegen etwas einzuwenden (gegen myAVR oder gegen BASCOM), gibt es da Einschränkungen, die ich nicht kenne (mein Kollege ist auch eher Anfänger)? - Mein Kollege verwendet einen Atmega8, kann ich problemlos einen Atmega328 nehmen und sein Code läuft bei mir? - Gibt es bessere Starter-Kits für meinen Zweck (Preis spielt eine untergeordnete Rolle, was aber nicht heisst, dass es unbedingt das teuerste sein muss)? Falls mir jemand einen anderen Mikrocontroller, ein anderes Starter-Kit oder eine andere Sprache vorschlägt, wäre ich auch für entsprechende Literaturempfehlungen dankbar.
Ernst L. schrieb: > Mit Arduino komme ich aber in einem neuen Projekt > an die Grenzen, weil von Haus aus die Eingänge des Atmega nur analog > nutzbar sind ? Sagt wer. Alle Eingänge sind grundsätzlich erst mal Digitaleingänge. Und ein paar davon, können umgeschaltet werden um damit Spannungen zu messen - die sog. Analogeingänge. >, ich aber zwei PWM-Signale (gleichzeitig) erfassen und > verarbeiten muss. Ja, und? Das nennt man programmieren, wenn man aus einer bestimmten Hardware die Funktionalität rausholt, die man braucht. Da hilft dir dann auch ein anderes Starterkit nichts. Denn programmieren musst du das da wie dort. Und dort liegt dann auch der eigentliche Knackpunkt. Ich sehe daher nicht wirklich, wie dir da jetzt ein anderes Starterkit deine Aufgabe erleichtert.
Ernst L. schrieb: > weil von Haus aus die Eingänge des Atmega nur analog > nutzbar sind, ich aber zwei PWM-Signale (gleichzeitig) erfassen und > verarbeiten muss. Tja, mit Hilfe eines Tiefpasses macht man aus PWM -> Analog. Gruss Harald
Arduino: Alle Eingänge nur analog nutzbar? Kann ich irgendwie nicht ganz glauben!. Wenn Du mit dem Arduino bereits Erfahrungen gemacht hast und es evtl. an ein/zwei Pin´s liegt weshalb Du nun auf "Bascom" umsteigen würdest, dann würde ich an deiner Stelle erst mal prüfen, ob ein Arduino Mega für dich in Frage kommt. Dieser ist u.a. in der Bucht für ca. 25€ neu aus China zu bekommen! Auch wenn Bascom sicher nicht schlecht ist, mit Arduino C Kenntnissen solltest Du nicht den Schritt in Richtung Basic wagen. Dann doch eher direkt nach C upgraden!
Karl Heinz Buchegger schrieb: > Alle Eingänge sind grundsätzlich erst mal Digitaleingänge. Und ein paar > davon, können umgeschaltet werden um damit Spannungen zu messen - die > sog. Analogeingänge. Ja, das war nicht ganz korrekt von mir, natürlich kann man sie digital oder analog nutzen. Das Problem ist die Auswertung von Sensoren die PWM ausgeben. Such mal nach "Input Capture Pin" und Arduino. Also für mich als uC-Laie klingt das so, als ob das etwas ist, was der Atmega eigentlich hat, in der Arduino-Welt aber nicht vorkommt. Wenn das falsch ist, dann bitte erklären oder eine Literaturempfehlung geben, Danke. Harald Wilhelms schrieb: > Tja, mit Hilfe eines Tiefpasses macht man aus PWM -> Analog. Das ist klar, ich möchte es aber möglichst genau messen.
visitor schrieb: > Auch wenn Bascom sicher nicht schlecht ist, mit Arduino C Kenntnissen > solltest Du nicht den Schritt in Richtung Basic wagen. Dann doch eher > direkt nach C upgraden! Ich hatte gleichzeitig gehofft und befürchtet, dass jemand sowas sagt. Es ist eine Tragödie, kaum ist Dennis Ritchie ein Jahr tot, schon wechseln die Leute zurück auf Basic... :)
Ernst L. schrieb: > Das Problem ist die Auswertung von Sensoren die PWM > ausgeben. Such mal nach "Input Capture Pin" und Arduino. Also für mich > als uC-Laie klingt das so, als ob das etwas ist, was der Atmega > eigentlich hat, in der Arduino-Welt aber nicht vorkommt. Schon. Aber auch bei einem normalen Mega hast du nur 1 Input Capture Pin. D.h. für die Auswertung der 2.ten PWM musst du dir sowieso was anderes einfallen lassen. Und was für einen Eingang funktioniert, funktioniert auch für zwei. So gesehen, bringt dir ein 'nackter' Mega nichts, was du mit einem Arduino nicht auch hinkriegen würdest. Setz deine Hoffnungen daher lieber nicht in "mit einem anderen Starterkit ist das alles ganz einfach und macht sich praktisch von alleine". Denn dem ist nicht so. > Das ist klar, ich möchte es aber möglichst genau messen. Definiere "möglichst genau". Wie hoch ist die PWM Frequenz und auf wieviele Stellen nach dem Komma benötigst du das Tastverhältnis 'genau'?
Ernst L. schrieb: > Es ist eine Tragödie, kaum ist Dennis Ritchie ein Jahr tot, schon > wechseln die Leute zurück auf Basic... :) Freu Dich doch, das die Leute nicht alle wieder auf Fortran umsteigen wollen. :-) Gruss Harald
Ernst L. schrieb: > Das ist klar, ich möchte es aber möglichst genau messen. Definiere mal für dich "möglichst" in Zahlen. Welche Genauigkeit BRAUCHST du? Wenn du ein neues Starterkit nimmst hast du nicht automatisch 2 16 Bit Timer und 2 Input Capture Pins. Schau dir an was dein Arduino für eine Hardware hat und was der Prozessor kann. Basic ist nicht unbedingt ein Garant für möglichst schnelle Ausführung und damit im Falle von Polling der Eingangspins möglichst exakter Zeitmessung.
Nicht das wir uns falsch verstehen. Ich habe nichts gegen das MK2. Und dieses Argument ... > Ich habe mir daher gedacht, dass ich am besten auch dieses Board > und diese Sprache verwende, damit wir uns gegenseitig unterstützen > können. ... ist durchaus nicht von der Hand zu weisen. Wenn ihr zusammenhocken könnt und euch gegenseitig eure Erkenntnisse und Erfahrungen (und Fehlschläge) erzählen und darüber diskutieren und neue Ideen ausbrüten könnt, dann kann das sehr sinnvoll sein. Auf jeden Fall ist es besser, als wenn da 2 Einzelkämpfer sich abmühen. Ich hab aber irgendwie den Eindruck, du versprichst dir von der technischen Seite her mit einem Wechsel etwas zu viel. Denn leichter, im Sinne von technisch einfacher, wird die Aufgabe deswegen auch nicht.
Also, es geht darum, in einem Fahrzeug verschiedene Sensoren auszuwerten. Ein Beispiel ist hier beschrieben, den Strom in/aus der Batterie: Beitrag "Strommessung im Auto, ca. 12 60A DC" Ein Sensor mit PWM wäre besser als mit analogem Ausgang, wichtig ist, dass ich den Nullpunkt störungssicher erfassen kann. Andere Messungen sind Umdrehungen, Geschwindigkeit, Benzinverbrauch. RPM und Geschwindigkeit sind eigentlich kein PWM sondern nur Impulse variabler Frequenz, von 0 bis ca. 200Hz, hier könnte man wohl wirklich pollen und braucht keinen ICP. Analogwandlung ist aber keine Option, da man sonst auch hier Probleme mit dem Nullpunkt hat. Das anspruchsvollste ist der Benzinverbrauch, denn hier habe ich vermutlich ein PWM oder zwei Taktsignale (Hin- und Rückfluss) vom Durchflussmesser (genau weiss ich es noch nicht, weil sich das Datenblatt ausschweigt weil der Sensor nur zusammen mit dem Messgerät verkauft wird), und muss das ganze noch mit dem Tachosignal verrechnen (also insgesamt entweder ein PWM und zwei Taktsignale oder drei Taktsignale). Dazu soll auch noch der Tankinhalt gemessen und die erwartete Reichweite auf Basis des Benzinverbrauchs berechnet werden. Geht das mit einem (bzw. mehreren) Atmega 328?
Ernst L. schrieb: > Geht das mit einem (bzw. mehreren) Atmega 328? Gib deinem Mega noch ein bischen was 'richtiges' zu tun. Sonst langweilt der sich und aktiviert die Selbstzerstörung. Das schwierigste in deinem Projekt, ist der Aufbau der Sensoren. Aber 200Hz messen, stellt jetzt nicht wirklich das große Problem dar.
Karl Heinz Buchegger schrieb: > Gib deinem Mega noch ein bischen was 'richtiges' zu tun. Sonst langweilt > der sich und aktiviert die Selbstzerstörung. Ich deute das als ein "Ja". :). Okay, aber soll ich bei Arduino IDE bleiben oder wäre es sinnvoll zu wechseln, auf Bascom, Assembler oder "richtiges C"? Literaturempfehlung?
Ernst L. schrieb: > Karl Heinz Buchegger schrieb: >> Gib deinem Mega noch ein bischen was 'richtiges' zu tun. Sonst langweilt >> der sich und aktiviert die Selbstzerstörung. > > Ich deute das als ein "Ja". :). Okay, aber soll ich bei Arduino IDE > bleiben Arduino IDE ist schon richtiges C (bzw. eigentlich C++). So gesehen gewinnst du nichts mit einem Wechsel. Assembler: Ich denke nicht, dass dir das noch groß was bringt. RPM, Geschwindigkeit, Benzinverbrauch .. da ist nix groß Speed-Abhängiges drinn, was man nicht sowieso mit einem Timer erledigt. So gesehen bringt dir Assembler ausser höherer Fehlerrate in der Programmierung gar nichts.
Danke. Eins habe ich noch vergessen: Ein Kilometerzähler soll früher oder später auch umgesetzt werden (bitte keine Diskussion über Sinn oder Legalität, zumal die Gesetze diesbezüglich in der Schweiz etwas anders sind als in Deutschland). Hier ist es einfach wichtig, dass der Controller kein Signal verpasst, damit er richtig zählt. Sollte mit Interrupts machbar sein. Ausserdem muss er das ganze irgendwann ins EEPROM schreiben, wenn das Auto ausgeschaltet wird. Habe mich noch nicht im Detail damit befasst, aber ich nehme an, das sollte auch so möglich sein, oder? Und wie gesagt, wenn jemand eine gute Literaturempfehlung (deutschsprachig) hat, um sich richtig darin einzuarbeiten, immer her damit.
> Hier ist es einfach wichtig, dass der Controller kein Signal > verpasst, damit er richtig zählt. Bei 10Mhz Taktfrequenz hast du ca. 8 Millionen Operationen. IN DER SEKUNDE! Und wenn das nicht reicht, geht man eben hoch auf 16Mhz. Denkst du echt im Auto wäre iregendwas so dermassen schnell, dass du da an die Grenze kommst? Zum Thema Durchflussmesser: Erzeugen die echt eine PWM? Ich würde da eher erwarten, dass die pro definiertem Volumen einen Puls erzeugen. D.h. due Durchflussmenge feststellen ist auch nichts anderes als eine Frequenzmessung (Anzahl Pulse pro Zeiteinheit zählen).
Karl Heinz Buchegger schrieb: > Bei 10Mhz Taktfrequenz hast du ca. 8 Millionen Operationen. Blöde Laienfrage: Und wie weiss ich, wie viele Operation der uC verbraucht um meien Code zu lesen und zu kapieren, was er machen muss? Zu schnell wiederum darf er auch nicht sein, sonst zählt er einen Impuls zweimal. Also muss man unter Umständen ein Delay einbauen. Dann hat man aber wieder ein Problem, wenn mehrere Signale erfasst werden sollen, die, auch wenn sie langsam sind, zufälligerweise in kurzen Abständen oder sogar gleichzeigt eintreffen können. Also brauche ich doch einen Interrupt für das wichtigste Signal, auch wenn es langsam ist. Oder schreibe ich gerade völligen Stumpfsinn?
Du kannst auch den Arduino aus Bascom heraus ansprechen. Hier habe ich beschrieben, wie das geht: Beitrag "Hinweis:Arduino Uno aus Bascom heraus flashen" MfG Paul
Paul Baumann schrieb: > Du kannst auch den Arduino aus Bascom heraus ansprechen. Danke, werde ich mir anschauen.
Ernst L. schrieb: > Karl Heinz Buchegger schrieb: >> Bei 10Mhz Taktfrequenz hast du ca. 8 Millionen Operationen. > > Blöde Laienfrage: Und wie weiss ich, wie viele Operation der uC > verbraucht um meien Code zu lesen Den muss er nicht lesen :-) Den hat er schon so aufbereitet vor sich, dass sich die 8 Mio OPerationen ergeben. > Zu schnell wiederum darf er auch nicht sein, sonst zählt er einen Impuls > zweimal. Nö. WEnn das passiert, dann hast du einen Programmfehler gemacht. So einfach ist das. Ein Impuls zeichnet sich dadurch aus, dass sich der Pegel verändert hat. Siehst du also 2 mal hinterinander im Abstand von einer Zehntausendstel Sekunde nach und hast du beides mal High festgestellt, dann war das kein Impuls. Siehst du aber einmal nach und stellst Low fest und eine Zehntausendstel Sekunde später stellst du High fest, dann ist das der Beginn eines Pulses. > Also muss man unter Umständen ein Delay einbauen. Nein, muss man nicht. Man muss nur richtig programmieren. > Also brauche ich doch einen Interrupt für das wichtigste Signal, > auch wenn es langsam ist. Kann man machen, muss man aber nicht machen. 200Hz sind für deine µC Extrem Super Hyper Ultra Zeitlupe. Das ist so, wie wenn du alle 5 Sekunden mal kurz die Augen öffnest und feststellen sollst wann der nächste Tag anbricht um zu messen wieviele Tage ein Jahr hat. Schaffst du locker. Selbst wenn du nur alle 5 Sekunden nachsiehst ob es jetzt hell oder dunkel ist. Da läufst du nicht Gefahr einen Tag zu verpassen. > Oder schreibe ich gerade völligen Stumpfsinn? tust du.
Ernst L. schrieb: > Zu schnell wiederum darf er auch nicht sein, sonst zählt er einen Impuls > zweimal. Du solltest schon die Flanke, also die Änderung von einem Pegel zum anderen auswerten. Und im Zweifel entprellen.
Udo Schmitt schrieb: > Du solltest schon die Flanke, also die Änderung von einem Pegel zum > anderen auswerten. Danke für den Hinweis. Damit ist gemeint, dass ich den Wert auslese, in eine Variable speicher und beim nächsten Auslesen den neuen Wert mit dem alten vergleiche, oder gibt es einen speziellen Flankenerkennungsbefehl?
Ernst L. schrieb: > Udo Schmitt schrieb: >> Du solltest schon die Flanke, also die Änderung von einem Pegel zum >> anderen auswerten. > > Danke für den Hinweis. Damit ist gemeint, dass ich den Wert auslese, in > eine Variable speicher und beim nächsten Auslesen den neuen Wert mit dem > alten vergleiche, oder gibt es einen speziellen Flankenerkennungsbefehl? Nicht für alles gibt es spezielle Befehle. Manchmal reicht auch ein ganz einfaches != welches eine spezielle Funktion erfüllt um zu einem 'hochgestochenem Namen' zu kommen. Du hast das schon richtig erkannt. Neuer_Wert = .... if( NeuerWert != AlterWert ) { AnzahlPulse++; AlterWert = NeuerWert; } und diese Sequenz braucht ca. über den Daumen 20 bis 30 Instruktionen (und da hab ich schon hoch geschätzt) ... von den 8 Millionen, die du bei 10Mhz pro Sekunde hast :-) Vielleicht siehst du jetzt, dass du da einen Boliden an der Hand hast, dessen Leistungsvermögen du krass unterschätzt.
Danke, danke. Dann bleibe ich bei Arduino und kann nachts wieder gut schlafen.
Um Flanke zu detektieren, kann z.B. der PCINT Interrupt des Arduinos einen Timer starten bzw. stoppen. In Abschnitt 6.5 meines Buches zu Arduino habe ich das betreffende Interrupthandling mit Programmbeispielen beschrieben. Bei Interesse: http://www.amazon.de/Arduino-Hard--Software-Source-Plattform/dp/390785716X/ref=sr_1_35?ie=UTF8&qid=1349779478&sr=8-35 Claus Kühnel
Claus K. schrieb: > Bei Interesse: > http://www.amazon.de/Arduino-Hard--Software-Source... Habe mir eben dieses Buch von Claus Kühnel sowie das Arduino Kochbuch bestellt.
Hier gibt es die Info auch kostenlose für ALLE : http://erik-bartmann.de//download/ArduinoInterruptsteuerungTeil1.pdf
visitor schrieb: > Hier gibt es die Info auch kostenlose für ALLE : > > http://erik-bartmann.de//download/ArduinoInterruptsteuerungTeil1.pdf Schade, Teil2 und Teil3 findet man so nicht. :-) Gruss Harald
visitor schrieb: > Hier gibt es die Info auch kostenlose für ALLE : > > http://erik-bartmann.de//download/ArduinoInterruptsteuerungTeil1.pdf Der Beitrag gefällt mir sehr gut. Allerdings behandelt er nur INT0 und INT1. Durch den Blick ins Buch bei Amazon können die betreffenden Abschnitte angesehen werden. Hier werden neben INT0 und INT1 auch noch PCINTx, Timer Interrupt, Watchdog Interrupt und verschiedene ADC Modi betrachtet. Ausserdem sind alle Files downloadbar (http://www.ckuehnel.ch/dokuwiki/doku.php?id=arduino). Gruss Claus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.