Melodieklingel mit PIC

Gast #41754
Lesenswert?

Hallo Leute,

anbei findet ihr eine kleine Applikation zum spielen.
Die Grundidee stammt von einer Schaltung aus dem Funkamateur. Das war 
übrigens meine erste Schaltung mit Mikroprozessor.

Die Frequenzen der Tonleiter und die Melodien sind einem Beispiel 
entnommen, welches ich irgendwo im Netz gefunden habe. Da ich meine 
Suche aber nicht mehr nachvollziehen kann (soll heißen ich finds nicht 
mehr) habe ich das Beispiel im Ordner \Vorlage mit rein gepackt.

Falls jemand damit rumspielt und andere Melodien implementiert währe es 
schön, wenn diese hier zur Verfügung gestellt würden.

Ich habe den PIC16F628 verwendet, da ich davon genug rumliegen habe. Der 
Code sollte aber mit geringfügigen Änderungen auf allen anderen PIC´s 
lauffähig sein.

MfG
Steffen
Angehängte Dateien:
Gast #41757
Lesenswert?

ich habe gerade gemerkt, das ich vergessen hatte eine Zeile Code, welche 
ich zum Testen eingefügt hatte zu löschen.

Resultat ist, das nur die erste Melodie gespielt wird.

Es betrifft folgenden teil des Hauptprogrammes:
M_Nummer_OK  movf  MelodieNummer,0
    movlw  57 ; !!! Diese Zeile muss raus
    call  Get_Mel_Adr

  ; dieser Programmteil dürfte nicht durchlaufen werden, wenn
  ; die Überprüfung der Melodie-Nummer OK ist

    iorlw  0
    btfsc  STATUS,Z
    goto  Adr_OK

  ; falls doch Fehler, dann wird erste Melodie gespielt

Im Anhang findet Ihr auch gleich den korrigierten Code.

MfG
Steffen
Angehängte Dateien:
Gast #41760
Lesenswert?

in dem UP "100ms" fehlte noch eine Zeile, um den Lautsprecher ganz
sicher nach dem Lied stromlos zu bekommen. (SET SPEAKER)

'*********************************************************************** 
*****
100ms:
'*********************************************************************** 
*****

   ' --- Zähler für Tondauer handeln ----------------------
   If Zeit > 0 Then
     Zeit = Zeit - 1
   Else
     Disable Timer0           ' wenn abgelaufen dann Ton aus durch
Timer0 aus
     Set Speaker
   End If

   ' --- Zähler für Sperrzeit von INT1 handeln ------------
   If Sperre > 0 Then
     Sperre = Sperre - 1
   Else
     Set Led_sperre           ' LED Sperre aus
     Enable Int1              ' INT1 wieder freigeben
   End If

   Gosub Blink_led            ' Takt-LED blinken lassen

Return

Gruß Uwe
Gast #41767
Lesenswert?

Den Schaltplan hab ich leider nicht mehr. Es war aber eine Schaltung aus
dem Funkamateur.

Ich hab allerdings noch eine voll bestückte und eine kaum bestückte
Platine liegen, wo ich damals die Bauelemente schon aufgezeichnet
hatte. Daraus könnte man problemlos den Schaltplan wieder
zusammensetzen.

Steffen

PS: Das Melodieformat des Programmes aus dem Originalbeitrag ist mit
dem damals verwendeten identisch.
Gast #574880
Lesenswert?

Naja und hab jetzt dran rumgebastelt und versucht ihn in einen lf84a zu 
brennen, naja probs ohne ende:

Error[113]   F:\KLINGEL.ASM 175 : Symbol not previously defined (PIE1)
Error[113]   F:\KLINGEL.ASM 177 : Symbol not previously defined (VRCON)
Error[113]   F:\KLINGEL.ASM 179 : Symbol not previously defined (TXSTA)
Error[113]   F:\KLINGEL.ASM 180 : Symbol not previously defined (RCSTA)
Error[113]   F:\KLINGEL.ASM 184 : Symbol not previously defined (T1CON)
Error[113]   F:\KLINGEL.ASM 185 : Symbol not previously defined (T2CON)
Warning[202] F:\KLINGEL.ASM 187 : Argument out of range.  Least 
significant bits used.
Error[113]   F:\KLINGEL.ASM 188 : Symbol not previously defined (CMCON)
Message[302] F:\KLINGEL.ASM 195 : Register in operand not in bank 0. 
Ensure that bank bits are correct.
Message[302] F:\KLINGEL.ASM 198 : Register in operand not in bank 0. 
Ensure that bank bits are correct.
Warning[220] F:\KLINGEL.ASM 1264 : Address exceeds maximum range for 
this processor.
Warning[220] F:\KLINGEL.ASM 1265 : Address exceeds maximum range for 
this processor.
Warning[220] F:\KLINGEL.ASM 1266 : Address exceeds maximum range for 
this processor.
Warning[220] F:\KLINGEL.ASM 1267 : Address exceeds maximum range for 
this processor.
Warning[220] F:\KLINGEL.ASM 1268 : Address exceeds maximum range for 
this processor.
Warning[220] F:\KLINGEL.ASM 1269 : Address exceeds maximum range for 
this processor.
Warning[220] F:\KLINGEL.ASM 1270 : Address exceeds maximum range for 
this processor.

vll tipps was ich ändern muss?
Gast #574896
Lesenswert?

Nee, tschuldigung. Der 16lf84 kennt kein CMCON, PIE1, VRCON, usw. die 
Zeilen kannst Du so rausschmeissen. TXSTA, RCSTA gehören zur UART. Sowas 
hat der 84er auch nicht und deshalb kann der ganze Code entfernt werden. 
Ich denke es wäre am wenigsten Arbeit wenn Du nur die Programmteile des 
Melodieprogramms in ein Template für den 84er reinkopierst.

Gruss
Gast #574916
Lesenswert?

naja hab das ganze jetzt in einen 16f628A gebrannt aber es tut sich 
genau GAR NICHTS wenn ich auf den taster drück. Mein Aufbau:

+5v auf vdd, masse auf vss einen 4mhz Quarz(hab den ja wegen dem 84a 
draufgelötet) auf osc1 u osc2. taster geht auf rb0 und auf masse. so 
einen kleinen piepslautsprecher da was auch in grusskarten zu finden ist 
auf masse u. rb7

hab ich da was falsch gemacht? leider gab es kaum erklärung zum aufbau

Configuration Bits im MPLAB IDE eingestellt:

OSCILLATOR: XT
Watchdog Timer: On(Hab irgendwo im programmcode clrwdt gelesen also 
vermute ich mal das der code dafür geschrieben ist)
Power UP Timer: Enabled
Brownout Disabled: Disabled
Master Clear Enable: Enabled
Low Voltage Program: Disabled
Data EE Protect: Disabled
Code Protect: Disabled

Findet ihr da vll irgendeinen fehler?
Achja und die include zeile sieht natürlich so aus:
  include p16f648a.inc

hab ich natürlich angepasst^^

MFG
#574939
Lesenswert?

Das sieht halt so aus, dass die Speicherorganisation im Controller 
gleich sein muss (Bankgröße) da das Melodie-Programm den PC direkt 
verändert, um auf die Melodieadresse zu kommen, wenn hier ein Fehler 
passiert sprint der Controller in Nirvana! (Oh ich wäre gerne im Nivana, 
was dort alles sein muss....)

Da hilft, wenn man nicht weis wo ansetzen, nur debuggen und kleine 
Brücken einbauen...
Sorry bin nicht sehr hilfreich...
Gast #735096
Lesenswert?

Hallo alle Melodieklingelinteressierten,
meine Melodieklingel ist zwar im Tonbyteformat nicht ganz kompatibel zum 
Original im Funkamateur verwendeten, dafür passen aber dann mehr 
Melodien in den Chip (PIC 12F683) - mittlerweile sinds 96 Melodien.

http://sbarth.dyndns.org/seiten/rahmen.php?nav=klingel#v3

Wer den Originalbeitrag FA 4/86 und die zugehörigen EPROM-Inhalte sucht, 
wird ebenfalls fündig.

Grüße Steffen
Gast #784277
Lesenswert?

Hallo,
Ich würde gerne so eine Klingel nachbauen , bin aber leider blutiger 
Anfänger.

Einen Eeprom Brenner hab ich Lötkolben ist auch vorhanden.

Was ich brauche ist eine Liste mit allen Bauteilen (wirklich allen)
und eine kleine Anleitung wie ich das ganze über die Bühne bringe.

Ich wäre über antworten sehr erfreut

zwoemti at web de

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren