Forum: Mikrocontroller und Digitale Elektronik Neu im MC-Bereich (Hilfe gesucht)-Melodiegong


von Patrick S. (megusta22)


Lesenswert?

Hi.

Ich bin komplett neu in der Sparte der Microcontroller und hab deswegen 
keine Ahnung welchen Microcontroller ich am besten für ein Projekt, 
welches ich von der Schule aus zu machen habe, verwenden soll.

Gesucht wäre ein Microcontroller welcher mit den folgenden 
Voraussetzungen etwas anfangen kann.

----
Es soll ein elektronischer-Melodigong entworfen werden... Hierfür würde 
ich nun eben gerne einen Microcontroller verwenden, doch wie bereits 
beschrieben bin ich in diesem Gebiet komplett neu.

Vorraussetzungen:
• Batteriebetrieb des Geräts
• Einschalten und Start über einen Taster (Gong bleibt nur solange in 
Betrieb, wie der Taster gedrückt wird)
• mindestens 2 unterschiedliche Töne
• digitale Ablaufsteuerung mit mindestens 4 Schritten (ev. mit 
automatischer Wiederholung)
• Anzeige des jeweils gewählten Tones durch verschiedenfarbige LEDs
• Wahl der Melodie über Jumper

Zusatfunktionen:
• mehr unterschiedliche Töne;
• Selbsthaltefunktion der Stromversorgung (nur kurzer Tastendruck reicht 
aus, ganze Tonfolge wird
abgespielt)
• Kurzzeitiges Loslassen des Tasters startet Alternativmelodie


...Das wären die Punkte meiner Aufgabenstellung. Nun eben die Frage: Mit 
welchem Microcontroller kann ich all diese Features realiesieren?

Würde mich über rasche Hilfe sehr freuen.

Mfg. Patrick

von Achim M. (minifloat)


Lesenswert?

Das passt mit ordentlich Luft locker in einen ATtiny13 rein.

Die ganzen Verzögerungszeiten kann man ruhig mit delays im Programmcode 
erreichen, für die Töne nimmt man dann doch besser den Timer0 im 
CTC-Modus. Ich hab auf ähnliche Weise vor ein paar Wochen einen 
Kühlschrankalarm gebaut.

PS: Der Tiny13 oder der Tiny13A lässt sich noch bequem in C 
programmieren. Billig ist er auch...

von Elolehrling (Gast)


Lesenswert?

Ich vermute mal diesen "Gong" realisierst du mit einem Buzzer? Ganz 
spontan fällt mir da der PIC16F887 ein. Vermute mal, für dein Vorhaben 
wird der Controller natürlich um einiges zu gross sein... Falls du 
allerdings später vor hast auch selber andere Dinge zu Programmieren, 
kann der uC nicht schaden. Preislich gesehen dürfte er auch nur 2-3 Euro 
teurer sein als die kleinen 18 PIN uC's.

Ich habe dir im Anhang mal eine kleine Schaltung beigelegt. Diese 
funktioniert mit einer 100 % sicherheit (Die Schaltung ist auf meinem 
selbst entickelten Dev. Board und wurde oft genug getestet!)

Das RB0 Teil sieht bisschen reingebastelt aus, liegt daran dass auf 
meinem Board eigentlich noch ein DIP-Switch zwischen uC und dem Summer 
liegt, der tut aber nichts zur Sache.

Für weitere fragen stehe ich dir gerne zur Verfügung.

Hoffe ich konnte bisschen weiterhelfen. :)

von Elolehrling (Gast)


Angehängte Dateien:

Lesenswert?

Sorry, das Bild ging vergessen!

von Patrick S. (megusta22)


Lesenswert?

Das ging ja wirklich rasch :D

Ich danke dir vielmals Joachim ^^.
Werd mir den heute sobald ich daheim bin gleich mal bestellen.

Dankeschöön

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Patrick Sch. schrieb:
> Mit welchem Microcontroller kann ich all diese Features realiesieren?

Grundsätzlich ist diese Aufgabenstellung nicht sehr kompliziert.

Deien Anforderung ist also zur Not erfüllbar mit jedem uC, der 
mindestens 3 Beine hat (2 * Spannungsversorgung und 1 für Data in/out - 
<software OneWire>)

"bequemer" geht es natürlich, wenn du was "bekanntes" nimmst, 
insbesondere einen Controller, welcher schon/noch genügend freie 
Beinchen hat für deine Eingabe- und Ausgabeaktionen.

Wenns "einfach" sein soll: Schnapp dir das "Pollin Spiel" (google mal 
hier im Forum nach desem Begriff)


http://www.pollin.de/shop/dt/MTU4OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_Pollin_Spiel_I.html

Das hat schon die notwendige Hardware incl. Piepser, LED, Taster dabei, 
und ließe sich ohne großen Aufwand für deinen Zweck "umbauen".

Wenn du jedoch noch Hardware (Platine etc) selber machen möchtest, dann 
kannst du auch Einzelkomponenten nehmen, und dir was auf Lochraster 
zusammen löten.

Der für dich/euch "unbekanntere" Teil wird vermutlich die Software-Seite 
sein.

von Achim M. (minifloat)


Lesenswert?

Elolehrling schrieb:
> Das RB0 Teil sieht bisschen reingebastelt aus

Warum ein Emitterfolger? Warum nicht Kollektorschaltung?

Patrick Sch. schrieb:
> Werd mir den heute sobald ich daheim bin gleich mal bestellen.

Hast du auch ein Programmieradapter dafür?
Tipp: Bestell dir gleich ein paar davon. Hühnerfutter und 
Spannungsregler etc nicht vergessen!

von Patrick S. (megusta22)


Lesenswert?

Wegstaben Verbuchsler schrieb:
> Wenn du jedoch noch Hardware (Platine etc) selber machen möchtest, dann
>
> kannst du auch Einzelkomponenten nehmen, und dir was auf Lochraster
>
> zusammen löten.

Genau dies ist der Fall... (Leiterplatte, Gehäuse....) muss alles selbst 
entworfen werden^^

Wegstaben Verbuchsler schrieb:
>
> Der für dich/euch "unbekanntere" Teil wird vermutlich die Software-Seite
>
> sein.

Softwaremäßig dürfte ich da keine Probleme haben. Da wie schon erwähnt 
wurde der uC mit einfachem C programmierbar ist.

von Elolehrling (Gast)


Lesenswert?

Joachim минифлоть schrieb:
>> Das RB0 Teil sieht bisschen reingebastelt aus
>
>
>
> Warum ein Emitterfolger? Warum nicht Kollektorschaltung?

Weil es absolut keine Rolle spielt... Ob du den Buzzer nun an den 
Kollektor hängst, oder an den Emitter, in dieser Schaltung würde es 
keinen Unterschied machen. Zudem wird das Dev. Board von unseren 
lehrlingen im 1. Lehrjahr gefertigt. Die wissen kaum, wie ein Transistor 
funktioniert... und mein Lehrmeister war der meinung, wenn der Buzzer am 
Emitter hängt, sei es einacher zu erklären. Und da in der heutigen Zeit 
nunmal "Der Chef hat immer recht" gilt, hängt das teil nun am Emitter.

von Achim M. (minifloat)


Lesenswert?

Patrick Sch. schrieb:
> mit einfachem C

Einfach? je nachdem. Wenn du schon C am PC gelernt hast, wird dir der 
Einstieg in die µC-Welt mit C auch gut gelingen. Wenn du noch kein C 
"kannst" und dich einfach so auf meinen Ratschlag verlässt, nicht.

Wichtig ist, wenn du schon C-Erfahrung hast, vor allem:
* Register und Bitfummelgeschichten
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_Register
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports
* Timer
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Timer
* Das Programm läuft in einer Endlosschleife oder bleibt in einer 
solchen hängen

Sonst einfach hier fragen stellen.
mf

von Achim M. (minifloat)


Lesenswert?

Elolehrling schrieb:
> in dieser Schaltung würde es
> keinen Unterschied machen.

Der Buzzer bekommt in Kollektorschaltung zumindest im Einschaltmoment 
ca. 0,6V mehr Spannung.

Elolehrling schrieb:
> wird das Dev. Board von unseren
> lehrlingen im 1. Lehrjahr gefertigt. Die wissen kaum, wie ein Transistor
> funktioniert.

Ist das kein Grund oder Anlass, ihnen beiläufig was darüber zu erzählen? 
Dabei kann man sich gleich ein Bild von der Interessenlage der Leute 
machen.

von Marc L. (dasbaum)


Lesenswert?

(Ich war msl o frei und habe mich mal eingloggt, bin nach wie vor 
Elolehrling)

Joachim минифлоть schrieb:
> Der Buzzer bekommt in Kollektorschaltung zumindest im Einschaltmoment
>
> ca. 0,6V mehr Spannung.

... und? Dieser Einschaltmoment liegt bei ein paar wenigen uS, sowas 
wird kein Mensch merken. Sobald das Teil mal läuft ist der Unterschied 
evtl. noch knapp bei 100mV. Auf die kommts nun auchnicht mehr wirklich 
draufan.

Joachim минифлоть schrieb:
> Ist das kein Grund oder Anlass, ihnen beiläufig was darüber zu erzählen?
>
> Dabei kann man sich gleich ein Bild von der Interessenlage der Leute
>
> machen.

Schon richtig, allerdings kann ich schlecht etwas ändern wenn es so von 
mir verlangt wird.

von Karl H. (kbuchegg)


Lesenswert?

Marc Liechti schrieb:

>> Der Buzzer bekommt in Kollektorschaltung zumindest im Einschaltmoment
>>
>> ca. 0,6V mehr Spannung.
>
> ... und? Dieser Einschaltmoment liegt bei ein paar wenigen uS, sowas
> wird kein Mensch merken. Sobald das Teil mal läuft ist der Unterschied
> evtl. noch knapp bei 100mV. Auf die kommts nun auchnicht mehr wirklich
> draufan.

Schon klar.
Gegen den Meister hast du argumentativ keine Chance.
Interessant wird es zb auch dann, wenn jemand mal statt einem 5V Summer 
einen 12V Summer anhängen will.


Ich denke auch, dass dein Meister hier nicht klug gehandelt hat. Auch 
Lehrlinge im ersten Lehrjahr sollten verstehen, dass es bei einem Summer 
keinen Unterschied macht, ob man ihm die Leitung zur Versorgungsspannung 
schaltet oder die zur Masse. Geschlossener Stromkreis ist geschlossener 
Stromkreis.

von Marc L. (dasbaum)


Lesenswert?

Dass es keinen Unterschied macht wird ihnen schon erklärt, das ist nicht 
das Problem. Nur ist der Stromkreis fürs erste einfacher zu erklären, 
wenn der Verbraucher am Emitter hängt. (Zumindest habe ich das damals im 
ersten Lehrjahr so empfunden.)

In derBerufsschule haben wir erst im zweiten Lehrjahr mit Transistoren 
begonnen, das Board müssen die 1. Lehrjahr Lehrlinge allerdings in 3 
Wochen fertig. (Überbetrieblicher Kurs Fertigungstechnik)

Es geht bei der ganzen Sache noch nichteinmal darum, dass sie die 
komplette Schaltung verstehen, schliesslich werden sie das board 
frühsten im Sommer 2013 benutzen können. Es geht in paar Wochen 
lediglich um die fertigung.

Aber darum geht es ja in diesem Thema hier garnicht. Da der 
Treadersteller offensichtlich das Programm mit C schreiben will, weiss 
ich nicht ob folgendes hilfreich ist, aber evtl. ist es dir eine Hilfe 
wenn du einen Teil meines Assembler Codes hast, wie ich den Buzzer 
bediene:

Erzeugen eines Tones:
1
  movlw    .4
2
  movwf    Ton          ; Dieser Wert bestimmt die Frequenz des Tones
3
  movlw    .25
4
  movwf    Laenge        ; Dieser Wert bestimmt die Länge des Tones
5
  call    Soundmachine

Abspielen des Tons:
1
Soundmachine            
2
3
delayTon
4
  clrf    TMR0
5
delay100us    
6
  movf    TMR0,w
7
  xorlw    .3
8
  btfss    STATUS,Z
9
  goto    delay100us      ; 100uS delay
10
        
11
  incf    ZeitA        ; Nach 100uS zählt ZeitA +1
12
  movlw    .100
13
  xorwf    ZeitA,0
14
  btfss    STATUS,Z      ; Wenn ZeitA =/= 100 ist (100*100uS = 10ms)
15
  goto    skip1        ; wird direkt nach skip1 gesprungen.
16
  incf    ZeitB        ; Falls ZeitA = 100 wird Zeit B inkrementiert,
17
  clrf    ZeitA        ; ZeitA wieder auf 0 gesetzt und danach nach 
18
                  ; nach skip1 gesprungen.
19
skip1                
20
  banksel   PORTA        ; Wenn Schalter 3 nicht mehr gedrückt ist
21
  btfsc    Schalter3      ; wird das Unterprogramm beendet.
22
  goto    Hauptprogramm    ; (Das Programm kann zu jedem Zeitpunkt beendet werden.)
23
24
  movfw    Laenge
25
  xorwf    ZeitB,0        
26
  btfss    STATUS,Z      ; Wenn ZeitB =/= der gewünschten Länge des Tones ist    
27
  goto    skip2        ; wird nach skip2 gesprungen.
28
  clrf    ZeitB        ; Sonst wird ZeitB wieder auf 0 gesetzt
29
  return              ; und der nächste Ton wird in der 
30
                  ; Buzzer-Mainroutine geladen.
31
skip2              
32
  incf    cntxus        
33
  movfw    Ton              
34
  xorwf    cntxus,0      
35
  btfss    STATUS,Z      ; Wenn die Dauer für die Tonfrequenz erreicht ist
36
  goto    delayTon
37
38
  clrf    cntxus        ; Wird die Countervariable der Tonfrequenz gelöscht
39
  movlw    b'00000001'      ; Und durch Ein- und Ausschalten des Buzzers
40
  xorwf    PORTB        ; der bestimmte Ton erzeugt.
41
  goto    delayTon

Mir ist klar, dass der Code nicht unbedingt viel sinn ergibt, wenn man 
nicht den kompletten Code hat, allerdings ist es ja nicht mein Ziel, den 
Code für ihn zu schreiben, sondern lediglich ihm ein paar Anhaltspunkte 
zu geben. Vielleicht kannst du ja etwas damit anfangen.

von Patrick Sch. (Gast)


Lesenswert?

Joachim минифлоть schrieb:
> Einfach? je nachdem. Wenn du schon C am PC gelernt hast, wird dir der
> Einstieg in die µC-Welt mit C auch gut gelingen. Wenn du noch kein C
> "kannst" und dich einfach so auf meinen Ratschlag verlässt, nicht.

seit 2 Jahren am C Programmieren ^^ ... Das werd ich schon iwie 
hinbekommen.

PS: Die anderen Kommentare werd ich mir dann daheim durchlesen^^ 
(Doppelposts erlaubt???)

von florian (Gast)


Lesenswert?

Am besten du verwendest den Atmega 8 ist für Anfänger der beste 
Controller. Er ist etwas größer, aber man kann sehr gut messen.

Ein bisschen C-Code zur Tonerzeugug:
1
while(1) // Endlosschleife
2
{
3
// Ausgang auf 1 setzen
4
_delay_ms(periodendauer/2)
5
// Ausgang auf 0 setzen
6
_delay_ms(periodendauer/2)
7
}

von troll (Gast)


Lesenswert?

florian schrieb:
> Ein bisschen C-Code zur Tonerzeugug:
>
1
> while(1) // Endlosschleife
2
> {
3
> // Ausgang auf 1 setzen
4
> _delay_ms(periodendauer/2)
5
> // Ausgang auf 0 setzen
6
> _delay_ms(periodendauer/2)
7
> }
8
>
Aber Vorsicht, periodendauer muss zur Compilezeit bekannt sein!

von dolf (Gast)


Lesenswert?

Joachim минифлоть schrieb:
> Ich hab auf ähnliche Weise vor ein paar Wochen einen
> Kühlschrankalarm gebaut.

hab ich notgedrungenderweise auch....
mein letzter tiefkühler hat sich einfach sang und klanglos durch 
kompressordefekt verabschiedet.
ne ganze ernte zum teufel.
mach grad die platinen fertig.
da mir programmkenntnisse gänzlich fehlen hab ich nen atmega32 als sps 
benutzt.
mit und, oder, nicht kann ich aber umgehen.
die sps kann ich per eagle graphisch programmieren.
irgendwelche programmierkenntnisse sind nicht von nöten.
ne logo ginge auch ist mir aber deutlich zu teuer.
hab n 2*16 display mit temp anzeige und uhr, ne led zeile als 
schnellanzeige und nen krachmacher wenn´s zu warm wird ( per taste stumm 
zu schalten)
den krachmacher hab ich allerdings als hardware realisiert da die sps am 
digi port nur frequenzen bis 100hz erzeugen kann.
zum langsammen takten ist es aber gut geeignet.
wie hast du den wächter realisiert?
mfg

von Achim M. (minifloat)


Lesenswert?

dolf schrieb:
> wie hast du den wächter realisiert?

Hatte hier ein viel banaleres Problem: Die Kühlschranktür bleibt 
bisweilen offen, ohen dass mans richtig sieht(Einbaukühlschrank). Die 
Lampe heizt dann noch zusätzlich das oberste Fach. Als dann wieder mal 
die Butter fast geschmolzen war, kam ein Alarm dran, der nach einer 
bestimmten Zeit losgeht, wenn die Tür auch noch einen klitzekleinen 
Spalt offensteht. Das mit der Temperaturüberwachung kann ja trotzdem 
noch dazugefriemelt werden :)

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.