Forum: Mikrocontroller und Digitale Elektronik Starterkit AVR mit Bascom


von Ernst L. (extraterrestrial)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Harald W. (wilhelms)


Lesenswert?

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

von visitor (Gast)


Lesenswert?

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!

von Ernst L. (extraterrestrial)


Lesenswert?

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.

von Ernst L. (extraterrestrial)


Lesenswert?

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... :)

von Karl H. (kbuchegg)


Lesenswert?

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'?

von Harald W. (wilhelms)


Lesenswert?

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

von Udo S. (urschmitt)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Ernst L. (extraterrestrial)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Ernst L. (extraterrestrial)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Ernst L. (extraterrestrial)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

> 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).

von Ernst L. (extraterrestrial)


Lesenswert?

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?

von Paul B. (paul_baumann)


Lesenswert?

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

von Ernst L. (extraterrestrial)


Lesenswert?

Paul Baumann schrieb:
> Du kannst auch den Arduino aus Bascom heraus ansprechen.

Danke, werde ich mir anschauen.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Udo S. (urschmitt)


Lesenswert?

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.

von Ernst L. (extraterrestrial)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Ernst L. (extraterrestrial)


Lesenswert?

Danke, danke. Dann bleibe ich bei Arduino und kann nachts wieder gut 
schlafen.

von Claus K. (claus_k)


Lesenswert?

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

von Ernst L. (extraterrestrial)


Lesenswert?

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.

von visitor (Gast)


Lesenswert?

Hier gibt es die Info auch kostenlose für ALLE :

http://erik-bartmann.de//download/ArduinoInterruptsteuerungTeil1.pdf

von Harald W. (wilhelms)


Lesenswert?

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

von Claus K. (claus_k)


Lesenswert?

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
Noch kein Account? Hier anmelden.