Forum: Mikrocontroller und Digitale Elektronik 5 Ton Auswertung mittels Atmega8


von Andre G. (gebbi)


Lesenswert?

Hallo, ich bin blutiger Anfänger auf dem Gebiet der Mikrocontroller und 
möchte direkt mit einem , wie ich denke nicht ganz einfachem Projekt 
beginnen.
Ich besitze das Pollin Evaluations Board, Atmega8,LCD Display, einen PC 
zum Programmieren und einige elektronische Bauteile.
Ich möchte eine 5 Ton auswrtung nach dem ZVEI Standard durchführen und 
das Ergebnis auf einem LCD Display ausgeben, die Ausgabe auf dem Display 
habe ich bisher ignoriert, da ich erst einmal die 5 Ton Auswertung 
realisieren möchte.
Als Grundlage verwende ich das Projekt von Martin Haun: 
http://home.arcor.de/output/elektronik/5ton-AVR.pdf

Bis her habe ich dem ATmega8 programmiert und versucht ein NF-Signal 
"einzuleiten", mittels eines MP3 Players.
Als Anzeige dient mir die LED auf dem Board, die an PD5  angeschlossen 
ist, den Quellcode in Bascom habe ich dann einfach geändert, von Portd.4 
auf Portd.5.
Jedoch, will die LED, nach dem Abspielen der 5 Ton folge einfach nicht 
leuchten....
Ich habe die Vermutung, das das NF Signal nicht erkannt wird, und kein 
Interrupt ausgelöst wird.
Ich habe als Eingänge PAD3 (Masse) und PAD4 dafür benutzt. Ich habe 
jedoch keine Germaniumdiode genutzt, und die Schaltung auf dem Pollin 
Board betrieben und mittels 40Pol. Pfostenstecker auf ein Steckbrett 
geleitet.

Kann ich denn so einfach den ATmega8 anstelle des von Martin verwendeten 
Mikrocontrollers benutzen ?

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Der Quarz ist in deiner Schaltung falsch gepolt. Außerdem hat R17 am 
linken Beinchen einen Wackelkontakt. Und in Zeile 42 deines 
Programmcodes ist ein Schreibfehler.

von Florian P. (db1pf)


Lesenswert?

Hallo,

ich habe über den Schaltplan und das Programm nur schnell drüber 
geschaut. Folgendes ist mir aufgefallen:
1. In der Schaltung wird der Analog-Comperator verwendet. Das heißt, du 
darfst das Signal nicht an anderen Pins einspeißen, so wie du es 
beschrieben hast. Es müssen die Pins mit AIN0 und AIN1 sein!.
2. Es hat schon seinen Sinn, dass eine Germaniumdiode verwendet wird: 
Eine Siliziumdiode hat eine Schwellspannung von 0,7V, eine 
Germaniumdiode von 0,2V. Wenn dein Einganssignal also eine Amplitude von 
nur 0,7V hat, kommt durch die Siliziumdiode nichts durch. Zum probieren 
kannst du die Diode auch einfach mal weg lassen.

Bitte zeichne für weitere Fragen auch einen Schaltplan und poste den 
Sourcecode. Damit kann man dir deutlich bessere Ratschläge geben. Sonst 
ist alles irgendwie geraten...

Grüße,
Florian

von Informer (Gast)


Lesenswert?

Hallo,

> Kann ich denn so einfach den ATmega8 anstelle des von Martin verwendeten
> Mikrocontrollers benutzen ?

Hättest Du die von Dir verlinkte PDF-Datei komplett gelesen, so wäre die 
Antwort klar ... (siehe letzte Seite)
Natürlich muss die andere Anschluss-Belegung des Mega8 berücksichtigt 
werden; dazu die Datenblätter der Controller zu Rate ziehen.

von Andre G. (gebbi)


Lesenswert?

Danke für die schnellen Antworten, ich werde das die Tage ausprobieren 
und meine Ergebnisse einstellen, bin momentan im Prüfungsstress, sonnst 
würde ich mich schneller daran begeben.

Einge Fragen hätte ich da aber noch:

Wegstaben Verbuchsler schrieb das der Quarz falsch gepolt wäre, ich 
dachte Quarze wären nicht gepolt ?, wie erkenne ich den die richtige 
Polung.
Und R17 hat einen Wackelkontakt, woher weiß er das ? und wo ist R17 ? es 
gibt doch nur 4 Widerstände in der Schalltung ?
Und in Zeile 42 wäre ein Fehler "Frequlong = 8000000 / Icr_neu ".

von Chris (Gast)


Lesenswert?

Andre G. schrieb:
> Wegstaben Verbuchsler schrieb das der Quarz falsch gepolt wäre, ich
> dachte Quarze wären nicht gepolt ?, wie erkenne ich den die richtige
> Polung.
Damit wollte er Dich nur darauf hinweisen, dass man mit den von dir zur 
Verfügung gestellten Informationen eigentlich nur raten kann.

Andre G. schrieb:
> Kann ich denn so einfach den ATmega8 anstelle des von Martin verwendeten
> Mikrocontrollers benutzen ?
Nein. Du musst zumindest das Programm anpassen. Falls die beiden µC 
nicht zufällig pinkompatibel sind, auch noch die Schaltung.

von Alex W. (a20q90)


Lesenswert?

Interessantes Projekt! Man könnte die Schaltung doch so abändern, das 
man eine 3-Ton-Folge bekommt. Also für nen Träger und jeweils eine für 0 
und 1;

So könnte man im AFU ein neuen TNC basteln um z.B. mit 100bps Daten 
davon zu schicken.

Falls der AVR es packt die Tonfrequenzen so zu separieren, das man jedem 
Byte einen Ton zuordnen kann, wäre das sogar ein TCN der 8Bit auf einmal 
versenden kann (ich glaub Olivia ist so ein Prinzip)

von Andre G. (gebbi)


Lesenswert?

Danke Chris,
In wie fern muss ich das Programm denn anpassen, ich habe bis jetzt nur 
die regfile geändert, auf "m8def.dat" und das programm dann übertragen 
und die Schaltung entsprechend der Pin Bezeichnung geändert.

Zur etwas näherern Erleuterung, die Tonfolge die zu einem "1" signal auf 
Portd.4 führt habe ich auf "12345" gesetzt und mithilfe eines 5Ton- 
generators eine mp3 Datei erstellt, welche die Folge beinhaltet, diese 
auf dem mp3 Player übertragen und getestet.
Jedoch wird der Portd.4 anscheinend nicht auf "1" signal gesetzt.
Ich warte bisher noch auf 2 Bauteile, momentan nutze ich den 8MHZ Quarz 
vom Board, welcher für den Attiny2313 ist, einfach 2Kabel in die IC 
halterung und auf ein Steckboard, in welchem dich auch der ATmega8 
befindet.

von Andre G. (gebbi)


Lesenswert?

Hier schonmal den Quelltext den ich benutze:


$regfile = "m8def.dat"
$crystal = 8000000


Ddrd = &B00010000


Config Timer1 = Timer , Prescale = 1 , Capture Edge = Rising , Noise 
Cancel = 1
Config Aci = On , Compare = On , Trigger = Rising

On Icp1 Oncapture
Enable Icp1

On Int0 Ontaster
Config Int0 = Falling
Enable Int0

Enable Interrupts

Dim Zaehler As Word
Dim Icr_neu As Word
Dim Icr_alt As Word
Dim Frequlong As Long
Dim Frequenz As Word
Dim A(5) As Word
 Dim Frequsumme As Word
Dim Adizaehler As Integer
Dim Durchschnitt As Word
Dim Grenzeo As Word
Dim Grenzeu As Word
Dim Ton As String * 1
Dim Tonalt As String * 1
Dim Folge As String * 5
Dim Timeout As Word

Main:


Waitms 2
Frequlong = 8000000 / Icr_neu
Icr_neu = 1
Frequenz = Frequlong

Incr Timeout
If Timeout > 40 Then
  Folge = ""
  Tonalt = ""
  Timeout = 0
End If


A(5) = A(4)
A(4) = A(3)
A(3) = A(2)
A(2) = A(1)
A(1) = Frequenz

Frequsumme = 0
For Adizaehler = 1 To 5
  Frequsumme = Frequsumme + A(adizaehler)
Next

Durchschnitt = Frequsumme / 5
Grenzeo = A(1) + 10
Grenzeu = A(1) - 10

If Durchschnitt > Grenzeu And Durchschnitt < Grenzeo Then

  Select Case Durchschnitt
    Case 1050 To 1070 : Ton = "1"
    Case 1150 To 1170 : Ton = "2"
    Case 1260 To 1280 : Ton = "3"
    Case 1390 To 1410 : Ton = "4"
    Case 1520 To 1540 : Ton = "5"
    Case 1660 To 1680 : Ton = "6"
    Case 1820 To 1840 : Ton = "7"
    Case 1990 To 2010 : Ton = "8"
    Case 2190 To 2210 : Ton = "9"
    Case 2390 To 2410 : Ton = "0"
    Case 2590 To 2610 : Ton = "w"
    Case Else : Goto Main
  End Select

Else : Goto Main
End If

If Ton = Tonalt Then Goto Main
Tonalt = Ton

Folge = Folge + Ton
Timeout = 0
If Len(folge) = 5 Then
  Print Folge
  If Folge = "12345" Then
    Portd.4 = 1
  End If
  Folge = ""
End If

Goto Main

 Ontaster:
Return


Oncapture:
  Zaehler = Timer1
  Icr_neu = Zaehler - Icr_alt
  Icr_alt = Zaehler
Return

von Andre G. (gebbi)


Angehängte Dateien:

Lesenswert?

So,Ich habe nun alle Bauteile erhalten, und die Schlatung exakt nach dem 
Vorbild in der pdf aufgebaut, das Netzteil stellt dabei das Pollin 
Evaluationsboard dar, die Schaltung ist auf einem Steckboard montiert, 
und die Eingänge , zB AIN0, habe ich mir anhand eines Belegungsplanes 
des ATMEGA8 Rausgesucht.
Mir ist eine LED am AusgangPD4 kaputtgeganden, falscher Vorwiderstand, 
und nur aus Testzweck, also nicht mit dieser Software, ist der Port 
vielleicht kaputt?

von Florian P. (db1pf)


Lesenswert?

Jetzt kann ich das gleiche wie Wegstaben Verbuchsler schreiben...

Es gibt hier wohl niemand der Hellsehen kann. Also kann dir hier auch 
niemand sagen ob der Port nun kaputt ist oder nicht. Andere LED, anderer 
Vorwiderstand und nochmal probieren. Unter umständen hast du aber auch 
den AVR komplett zerstört, bei problemen einen anderen zu verwenden wird 
wohl nicht schaden.

Komisch finde ich es aber schon, dass ausgerechnet die LED kaputt geht. 
Ich habe solche versuche auch schon gemacht ;) : Erst ist die LED sehr 
hell, dann wird sie schlagartig dunkel und glimmt dann nur noch so vor 
sich hin. Wenn das Gehäuse durchsichtig ist, dann sieht man sogar dass 
der Kristall schwarz ist. Aber dass der AVR so viel Strom schaltet hätte 
ich nicht gedacht. Was hast du denn für einen Widerstand verwendet????


Grüße,
Florian

von Andre G. (gebbi)


Lesenswert?

Ich benutze 470 Ohm, welcher normalerweise im "Rahmen liegt".
Momentan benutze ich 2,2 kOhm, also wie in dem Schaltnetz, ich kann nur 
noch sagen, das es angefangen hat zu Richen und der Kristall Schwarz 
ist.

von Andre G. (gebbi)


Angehängte Dateien:

Lesenswert?

Also, ich habe die Schltung soweit, aufgebaut, nach dem Schema, wie in 
dem Bild, welches ich hochgeladen habe.
Den Taster habe ich "rausgeworfen" und im Quellcode die Funktion 
"Ontaster" entfernt, es soll nur die LED angehen, wenn die richtige 
Folge erkannt wird.
Einen anderen Atmega8 habe ich auch probiert, und die LED mit einem 
testprogramm geprüft.
die grüne LED zeigt mir nur die betriebspannug an, sie hat einen 
Vorwiderstand von 2,2 kOhm.

von Andre G. (gebbi)


Lesenswert?

Die lange Widerstandsreihe ergibt 56 kOhm, durchgemessen 55kOhm.

von Andre G. (gebbi)


Angehängte Dateien:

Lesenswert?

Nun habe ich meine Schaltung an ein Oskar gehängt, ich habe ersteinmal 
Masse und Signal von meinem mp3 Player angeschlossen und habe "perfekte2 
sinus Wellen bekommen, bei welcher sich die Freqzent erhöht hat, die 
5Ton folge war 13579.
Nun habe ich an Masse und Pin 12 gemessen , die Ergebnisse habe ich mal 
hochgestellt. Die amplitude liegt bei ca. 0.6bis0.7 Volt, 1cm = 0.2V.
Es fäält uaf, das es eine komische Störung gibt, welche in regelmäßigen 
Abständen auftritt und das Signal überlagern könnte.
Ich bitte um eine Rückmeldung, Danke

von Andre G. (gebbi)


Lesenswert?

kann mir denn wirkliech keiner helfen?

von Charly B. (charly)


Lesenswert?

schilder mal genau wo das Problem ist, ist alles a bissel verwirrt ;)

geh i richtig in der annahme das du weder von elektronik
noch vom programmieren viel ahnung hast ? (ist nicht boese
oder abwertend gemeint, es dient dazu wie ich/wir dir
helfen koennen)

poste auch mal den von dir geaenderten code

vlG
Charly

von Andre G. (gebbi)


Angehängte Dateien:

Lesenswert?

Danke das sich jetzt einer meldet.
Ich hatte gestern den "Durchbruch" ^^
Der Mikrocontroller lief auf dem internen Oszilator und nicht auf dem 
8MHz Quarz, dies habe ich dann eingestellt, besser gesagt mein Lehrer, 
welcher die Idee hatte, das da was faul sein könnte. Und diehe da, seit 
dem wird ausgewertet.

ein LCD habe ich vor 5 Minuten auch schon angelötet, und zum laufen 
gebracht. Nun werde ich mich an den Quellcode begeben, welcher mir die 5 
Ton folgen ausgeben soll, bei Problemen melde ich mich nochmal. Und wenn 
ich fertig bin, werde ich hoffentlich den fertigen Quellcode und 
Schaltung hochladen.

Trotzdem hier schonmal ein Danke an alle

von Charly B. (charly)


Lesenswert?

Andre G. schrieb:
> Danke das sich jetzt einer meldet.

wieso jetzt ?, war vor 2 Tagen, noch keine Stunde
nach deinem post, wenn du schlaefst koennen andere
nix dafuer ;)

ei dann hopp, viel erfolg und bis bald

vlG
Charly

von Andre G. (gebbi)


Lesenswert?

Naja, in der Theorie klappt alles, den NF Eingang an die PC Soundkarte 
und 5 Ton Folgen abgespielt....
Klappt, blos an dem Scanner den wir in der Wache haben nicht.... bzw. 
nur bedingt. Mit dem 5 Ton tester haben wir ein paar 5 tonfolgen 
abgespielt, hier wird jedoch nur jede 3 oder 4 erkannt... auch die 
Probealamierung, die zu der Zeit war, wurde nicht vollständig 
ausgewertet, desweitern musste ich nen bissl mit der Lautstärke des 
scanner probieren, bis es überhaipt klappte.
Ich stelle mal den Quelltext hoch, den ich verwwendet habe, um die Töne 
zu erkennen. noch mehr Toleranz ist doch auch nicht gut oder ?

Main:


Waitms 2
Frequlong = 8000000 / Icr_neu
Icr_neu = 1
Frequenz = Frequlong

Incr Timeout
If Timeout > 36 Then
  Folge = ""
  Tonalt = ""
  Timeout = 0
  Lcd1 = ""
  Lcd2 = ""
End If


A(5) = A(4)
A(4) = A(3)
A(3) = A(2)
A(2) = A(1)
A(1) = Frequenz

Frequsumme = 0
For Adizaehler = 1 To 5
  Frequsumme = Frequsumme + A(adizaehler)
Next

Durchschnitt = Frequsumme / 5
Grenzeo = A(1) + 25
Grenzeu = A(1) - 20

If Durchschnitt > Grenzeu And Durchschnitt < Grenzeo Then

  Select Case Durchschnitt
    Case 1030 To 1100 : Ton = "1"
    Case 1130 To 1200 : Ton = "2"
    Case 1240 To 1310 : Ton = "3"
    Case 1370 To 1430 : Ton = "4"
    Case 1510 To 1550 : Ton = "5"
    Case 1650 To 1690 : Ton = "6"
    Case 1810 To 1850 : Ton = "7"
    Case 1980 To 2020 : Ton = "8"
    Case 2180 To 2220 : Ton = "9"
    Case 2380 To 2420 : Ton = "0"
    Case 2580 To 2620 : Ton = "w"
    Case Else : Goto Main
  End Select

Else : Goto Main
End If

If Ton = Tonalt Then Goto Main
Tonalt = Ton

Folge = Folge + Ton
Timeout = 0
If Len(folge) = 5 Then
  Lcd1 = Folge
  Cls
  Locate 1 , 6
  Lcd Lcd1
endif

von Chris (Gast)


Lesenswert?

Versuche doch mal folgendes:
Schreibe jeden erkannten Ton direkt aufs Display und schau was passiert. 
Dann siehst Du welche Töne erkannt wurden und welche nicht. Vielleicht 
wird dir das weiterhelfen.

Dein Aufbau sieht auch nicht gerade vertrauenserweckend aus. Ich 
vermisse die Abblockkondensatoren und einen Elko für die 
Eingangsspannung.

Da ich nicht unter die Platine schauen kann:
Das wichtigste Bauteil überhaupt ist übrigens die Masseleitung. Achte 
immer auf gute Masseführung. Ich verwende dafür bei Lochraster meistens 
0,6mm versilberten Kupferdraht und verlege sie als allererstes. Du wirst 
dich wundern, was für merkwürdige Probleme plötzlich wegen schlechter 
Masseführung auftauchen können :-)

Mit was versorgst Du die Schaltung? Stabilisierte 5V?

von Andre G. (gebbi)


Lesenswert?

JA, ich benutze 5V, aus dem Pollin Evaluationsboard.
die masseleitung habe ich mit den Abgeschnittenen Drähten gelegt, und 
diese komplett verkupfert. Einen 4,7yF Elko habe ich für das Display.

Die Schlatung Funktioniert ja mit dem PC, nur am Scanner nicht.
Die erkannten töne werde ich mir jetzt erstmal auflisten lassen. Und 
schaue mal, was dabei herum kommt.

von Charly B. (charly)


Lesenswert?

wenn du moechtest das man dir hilft dann trage auch was dazu bei!
post z.B. dein ganzes programm und nicht nur ein Teil,
i habe keine zeit & lust auf raetselraten oder code safari,
was soll das ?, irgendwie bist du schon ein spassisches
kerlchen..........

von Chris (Gast)


Lesenswert?

Andre G. schrieb:
> Also, ich habe die Schltung soweit, aufgebaut, nach dem Schema, wie in
> dem Bild, welches ich hochgeladen habe.

Das im zitierten Beitrag hochgeladene Bild ist aber doch dein Aufbau, 
oder? Falls ja: Ich wiederhole mich ungern. Abblockkondensatoren und 
Elko drauf!

von Andre G. (gebbi)


Angehängte Dateien:

Lesenswert?

Ich habe mich an das Schaltnetz gehalten, das ich hochgeladen habe, 
sowie an das Schaltnetz (Belegung am yC siehe Handschrift)welches ich 
jetzt hochlied.
Wo müsste ich nun Abblockkondensatoren anbringen, und was sind das 
genau?
Und wohin mus der Elko, und was muss es für einer sein?

Danke schonmal im Vorraus, und entschuldigt bitte mein Unwissen....

von Andre G. (gebbi)


Lesenswert?

Zudem habe ich vergessen, das ich nach der Germaniumdiode einen 
Widerstand auf ´Ground habe. Diesen kann ich mit 2 Jumpern steuern, 
folgendes ist möglich:

-Kein Widerstand auf Ground ( 1 Jumper raus )
-10kOhm auf Ground ( 1 und 2 Jumper drin )
-20kOhm auf Groun ( 1 Jumper drin )

von Chris (Gast)


Lesenswert?

Andre G. schrieb:
> Wo müsste ich nun Abblockkondensatoren anbringen, und was sind das
> genau?
> Und wohin mus der Elko, und was muss es für einer sein?
Schau mal hier:
http://www.rn-wissen.de/index.php/Abblockkondensator

Nimm 100n Keramikkondensatoren. Die packst Du dann (so nah wie möglich!) 
an die Spannungsversorgungspins des AVR (also zwischen die Pins 7+8 UND 
20+22). Ich hoffe Du hast die Pins 20+22 ebenfalls beschaltet (so wie in 
dem Schaltbild für das LCD).
Zusätzlich machst Du noch 100n von AREF an GND. Das ist zwar kein 
Abblockkondensator, sollte aber gemacht werden wenn man keine externe 
Referenzspannung dort anschließt.
Den Elko setzt Du am besten hinter die Klemme für die Eingangsspannung. 
Der Wert ist nicht so kritisch. 100µ oder so.

Andre G. schrieb:
> Danke schonmal im Vorraus, und entschuldigt bitte mein Unwissen....
Macht nix. Jeder fängt mal an :-)

P.S.
Gewöhne dir bitte ab solche Schaltungsfragmente zu posten. Keiner hat 
hier Lust auf Puzzlespielchen. Nimm dir irgendeinen Schaltplaneditor 
deiner Wahl (z.B. Eagle) und fertige einen kompletten Schaltplan an.

von eProfi (Gast)


Lesenswert?

Das Projekt mit dem oben genannten Code ist einfach Murks, es 
funktioniert vielleicht auf dem Schreibtisch, aber nicht oder zumindest 
nicht sicher im realen Einsatz.

Du brauchst ein Digitalfiler (Görtzelfilter o.Ä.).
Beitrag "Re: 5Ton auswertung mittels Atmega8"
http://de.wikipedia.org/wiki/Goertzel-Algorithmus

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.