Forum: Mikrocontroller und Digitale Elektronik Lärmampel von erfinderjo


von Sebastian M. (basti87)


Angehängte Dateien:

Lesenswert?

Liebe Forumgemeinde,

mein nächstes Projekt soll eine "Lärmampel" sein.
Die Idee stammt von erfinderjo:
http://www.erfinderjo.de/html/larmampel.html


Der Schaltplan ist teilweise unleserlich und erfinderjo kann ich nicht 
erreichen. Habe es nach bestem Wissen und Gewissen versucht und 
Teilweise herausgefunden, Schaltplan folg.

Könnte mir jemand helfen alle Bauteile zu identifizieren?

Frundliche Grüße
basti

von winne (Gast)


Lesenswert?

Also die einzigen Bauteile-(Werte) die ich nicht erkennen kann sind an 
PIN20,21,22 des MEGA8 angeschlossen. Schätze mal es sind zwei 
Kondensatoren 100nF oder so.

von Stefan (Gast)


Lesenswert?

Quatsch, das ist eindeutig ein Quarz mit den obligatorischen 
Kondensatoren dazu (siehe Datenblatt). Nur wieviel Mhz wäre natürlich 
gut zu wissen. Wenn man die Frequenz hat, kann man am Datenblatt 
ablesen, welche Kondensatoren empfohlen werden.

Am 7805 Spannungsregler fehlt eingangsseitig der 330nF Kondensator. 
Ebenso sehe ich keinen Abblockkondensator (z.B. 100nF) an der 
Stromversorgung des Mikrocontrollers. Denn der andere beim 
Spannungsregler gehört ja auch dort hin (ganz Nahe beim 
Spannungsregler).

Beim 7815 fehlen kleine Kondensatoren an beiden Seiten. Siehe 
Datenblatt!

von Karl H. (kbuchegg)


Lesenswert?

Stefan schrieb:
> Quatsch, das ist eindeutig ein Quarz mit den obligatorischen
> Kondensatoren dazu (siehe Datenblatt). Nur wieviel Mhz wäre natürlich
> gut zu wissen.

Da hilft dann das BASCOM Programm weiter
1
$crystal = 8000000

Also 8Mhz

Aber: wo siehst du da einen Quarz?
Pins 20, 21, und 22 sind GND, AREF und AVcc
-> 100nF

Am M8 wäre ein Quarz an den Pins 9 und 10

: Bearbeitet durch User
von Sebastian M. (basti87)


Lesenswert?

winne schrieb:
> Also die einzigen Bauteile-(Werte) die ich nicht erkennen kann sind an
> PIN20,21,22 des MEGA8 angeschlossen. Schätze mal es sind zwei
> Kondensatoren 100nF oder so.

Zwischen 21 - 22 sieht aus wie ein 100 nF.

Zwischen 20 - 22 sieht aus wie 3xx nF.

von Stefan (Gast)


Lesenswert?

Mir fällt nochwas auf: Den Mikrofon-Verstärker hätte man auch mit einem 
simplen Transistor aufbauen können. Wichtiger scheint mir allerdings 
eine Entstörung der Speisung des Mikrofons, sonst kommt am Ausgang des 
OP-Amps die Störung der 5V Spannungsversorgung um (bis zu) Faktor 10 
Verstärkt wieder raus.
1
       470 Ohm    ZD 2,7V
2
+5V o---[===]---+--|<|------| GND
3
                |
4
                |   10µF
5
                +----||-----|
6
                |
7
                |             Mikrofon
8
                +---[===]---+---(*)--------|
9
                      1k    | 
10
                            |
11
                         Zum Verstärker

von Stefan (Gast)


Lesenswert?

> Aber: wo siehst du da einen Quarz?
> Pins 20, 21, und 22 sind GND, AREF und AVcc

Oh, dann kann kein Quarz sein.
Ach da ist ja mein vermisster Abblockkondensator für die 
Stromversorgung!

Ich würde auch für beide 100nF nehmen.

von Sebastian M. (basti87)


Lesenswert?

Was ist das denn für ein Elektretmikrofon?

Welches kann ich da benutzen?

Habe MCE 101er und MCE 100er.

von winne (Gast)


Lesenswert?

Mega8 Pin 17,18,19 siehe Datenblatt

von Sebastian M. (basti87)


Lesenswert?

winne schrieb:
> Mega8 Pin 17,18,19 siehe Datenblatt

Ok, das sind die ISP Pins.

von Sebastian M. (basti87)


Angehängte Dateien:

Lesenswert?

Ich habe die Schaltung, so wie sie abgebildet ist dummer weise schon auf 
eine Platine gelötet.

Den Mega habe ich auch schon gebrannt.

Folgendes Problem habe ich:

Display zeigt:

"Programm?        "
"HA-Hilfe Kantine "

verschwindet dann nach einigen Sekunden und taucht nach einigen weiteren 
Sekunden wider auf. Wenn ich einen der beiden Taster drücke erscheint 
auch der jeweilige Text, hat aber keinen Einfluss auf das Verschwinden, 
passiert weiterhin.

Laut Quellcode kann das nicht sein.
Ich vermute es handelt sich hierbei um einen Hardwarefehler meinerseits.

Auf dem Foto erkennt man, das ich anstelle der BUZ21 die IRLZ34N 
genommen habe und dafür die Vorwiderstände streichen konnte. Die 
verbauten Widerstände sind für die LED'S.


1
Cursor Off                                                  'Startanzeige zum Wählen eines Parameterrezeptes:
2
Locate 1 , 1
3
Lcd "Programm?        "
4
Locate 2 , 1
5
Lcd "HA-Hilfe Kantine "
6
Do
7
If Pinc.4 = 1 Then
8
 Prog = 1
9
 Locate 1 , 1
10
 Lcd "                 "
11
 Locate 2 , 1
12
 Lcd "HA-Hilfe ist an! "
13
 Wait 1
14
 Reset Watchdog
15
 Wait 1
16
 Reset Watchdog
17
 Goto Parameter
18
End If
19
20
If Pinc.3 = 1 Then
21
 Prog = 2
22
 Locate 1 , 1
23
 Lcd "                "
24
 Locate 2 , 1
25
 Lcd "Kantine ist an! "
26
 Wait 1
27
 Reset Watchdog
28
 Wait 1
29
 Reset Watchdog
30
 Goto Parameter
31
End If
32
Waitms 300
33
Reset Watchdog
34
Loop

: Bearbeitet durch User
von winne (Gast)


Lesenswert?

Ist nur ein Teil des Programms, da kann Dir jetzt noch keiner helfen.
> GOTO Parameter ' was passiert da ?
> loop ' und weiter ?


***
- Mess mal die 5Volt.
- Brechen die zusammen, wenn das Display "aus" geht ?
- Wird der 7805 heiß ?

-> such dann mal nach einem Kurzschluß.

von spess53 (Gast)


Lesenswert?

Hi

Deaktiviere erst mal den Watchdog. Ein Fehlerquelle weniger.

MfG Spess

von Sebastian M. (basti87)


Lesenswert?

Guten Morgen,

winne schrieb:
> Ist nur ein Teil des Programms, da kann Dir jetzt noch keiner helfen.
>> GOTO Parameter ' was passiert da ?
>> loop ' und weiter ?
>
> ***
> - Mess mal die 5Volt.
> - Brechen die zusammen, wenn das Display "aus" geht ?
> - Wird der 7805 heiß ?
>
> -> such dann mal nach einem Kurzschluß.

Der 7805 wird nicht heiß, da kaum ein Stromfluss vorhanden ist. Nur ca. 
10mA.
Die 5V am Display brechen leider auch nicht zusammen.

Ich habe es auf einem Exp. nachgebaut, und Schrittweise zurückgebaut, 
bis nur noch die Standartbeschaltung und das Display übrig waren.

Der Fehler trat weiterhin auf.

Habe dann ein Testprogramm geschrieben, welches dann auch reibungslos 
funktioniert hat.

Muss also definitiv ein Softwareproblem sein!!

Werde heute nachmittag dann mal den Watchdog rausschmeißen.

von winne (Gast)


Lesenswert?

Hast Du ein CLS an der falschen Stelle zu viel ?

von Rene Z. (renezimmermann)


Lesenswert?

Mach doch mal ein minimal Programm rein:
1
Cursor Off
2
Locate 1 , 1
3
Lcd "Programm?        "
4
Locate 2 , 1
5
Lcd "HA-Hilfe Kantine "
6
Do
7
Reset Watchdog
8
Loop

von Sebastian M. (basti87)


Lesenswert?

Rene Zimmermann schrieb:
> Mach doch mal ein minimal Programm rein:
> Cursor Off
> Locate 1 , 1
> Lcd "Programm?        "
> Locate 2 , 1
> Lcd "HA-Hilfe Kantine "
> Do
> Reset Watchdog
> Loop

Guten Tag,

ich habe jetzt folgendes probiert:

1
$regfile = "m8def.dat"
2
3
$crystal = 8000000
4
$hwstack = 100
5
$swstack = 100
6
$framesize = 100
7
8
Config Pinc.2 = Input                                       'Taster - (T1)
9
Config Pinc.3 = Input                                       'Taster SET / Hauptseite (T2)
10
Config Pinc.4 = Input                                       'Taster Seite vor (T3)
11
Config Pinc.5 = Input                                       'Taster + (T4)
12
13
Config Pind.6 = Output                                      'grün
14
Config Pind.7 = Output                                      'gelb
15
Config Pinb.0 = Output                                      'rot
16
Config Pinb.1 = Output
17
18
19
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
20
Config Lcd = 16 * 2
21
22
Initlcd
23
24
Cls
25
26
Config Adc = Single , Prescaler = Auto , Reference = Internal
27
Config Watchdog = 2048
28
Start Watchdog
29
30
Cursor Off
31
Locate 1 , 1
32
Lcd "Programm?        "
33
Locate 2 , 1
34
Lcd "HA-Hilfe Kantine "
35
Do
36
Reset Watchdog
37
Loop


Die Anzeige zeigt den Text fehlerfrei an!!!!

von Sebastian M. (basti87)


Lesenswert?

winne schrieb:
> Hast Du ein CLS an der falschen Stelle zu viel ?

Wie meinst du das genau??

PS:

Es kann dann ja nur an diesem Codeschnipsel liegen:
1
If Pinc.4 = 1 Then
2
 Prog = 1
3
 Locate 1 , 1
4
 Lcd "                 "
5
 Locate 2 , 1
6
 Lcd "HA-Hilfe ist an! "
7
 Wait 1
8
 Reset Watchdog
9
 Wait 1
10
 Reset Watchdog
11
 Goto Parameter
12
End If
13
14
If Pinc.3 = 1 Then
15
 Prog = 2
16
 Locate 1 , 1
17
 Lcd "                "
18
 Locate 2 , 1
19
 Lcd "Kantine ist an! "
20
 Wait 1
21
 Reset Watchdog
22
 Wait 1
23
 Reset Watchdog
24
 Goto Parameter
25
End If
26
27
Waitms 300

: Bearbeitet durch User
von Sebastian M. (basti87)


Lesenswert?

Folgender Code ist fehlerbehaftet, wenn ich dann die waitms 300 in der 
dritt letzten Zeile auskommentiere, funktioniert das bisherige 
Testprogramm.



1
Cursor Off
2
Locate 1 , 1
3
Lcd "Programm?        "
4
Locate 2 , 1
5
Lcd "HA-Hilfe Kantine "
6
7
Do
8
Waitms 300
9
Reset Watchdog
10
Loop

von Dietrich L. (dietrichl)


Lesenswert?

Sebastian M. schrieb:
> Folgender Code ist fehlerbehaftet, wenn ich dann die waitms 300 in der
> dritt letzten Zeile auskommentiere, funktioniert das bisherige
> Testprogramm.

Dann ist der Watchdog wohl schneller als 300ms und macht einen Reset.

Wo ist er denn deklariert und wozu brauchst Du ihn überhaupt?

Gruß Dietrich

von Sebastian M. (basti87)


Lesenswert?

Es hat auf jeden Fall etwas mit dem wait Befehl vor dem RESET WATCHDOG 
zu tun!

Kennt jemand eine Lösung? bzw. eine Begründung dafür, das erfinderjo das 
so programmiert hat?

von spess53 (Gast)


Lesenswert?

Hi

>Kennt jemand eine Lösung?

Schmeiss das Watchdoggedöns komplett raus.

MfG Spess

von Sebastian M. (basti87)


Lesenswert?

Dietrich L. schrieb:
> Wo ist er denn deklariert und wozu brauchst Du ihn überhaupt?

Das kann ich dir auch nicht sagen, habe den code nicht selber 
geschrieben.

spess53 schrieb:
> Schmeiss das Watchdoggedöns komplett raus.

Ist dann die Funktion des Programmes noch gegeben?

von Daniel F. (df311)


Lesenswert?

Sebastian M. schrieb:
> spess53 schrieb:
>> Schmeiss das Watchdoggedöns komplett raus.
>
> Ist dann die Funktion des Programmes noch gegeben?

probiers doch einfach aus?
kostet nicht die welt (an zeit und aufwand)

von spess53 (Gast)


Lesenswert?

Hi

>Ist dann die Funktion des Programmes noch gegeben?

Du hast den Sinn eines Watchdogs nicht begriffen. Der Ersteller des 
Programm warscheinlich auch nicht.

MfG Spess

von winne (Gast)


Lesenswert?

>winne schrieb:
>> Hast Du ein CLS an der falschen Stelle zu viel ?

>Wie meinst du das genau??

Moin,
also das Fehlerbild:

> Display zeigt:
>"Programm?        "
>"HA-Hilfe Kantine "
>verschwindet dann nach einigen Sekunden und taucht nach einigen weiteren
>Sekunden wider auf.

lässt vermuten, dass ein CLS (clear screen) des Displays ausgeführt 
wird.

Ein CLS hast Du ja auch in der Ini-Phase des Programms. (danach hatte 
ich gefragt)

Da das ganze regelmäßig stattfindet sieht es tatsächlich nach einem 
falsch ablaufenden Watchdog aus. Dein Programm wird wohl immer wieder 
neu gestartet.


@Sebastian
Weshalb hast Du den Watchdog im Programm ?

>GOTO Parameter
Was passiert hier ?
- Gibt es kein RETURN ?
- Verweilt das Programm zu lange im Unterprogramm "Parameter" ?

von Sebastian M. (basti87)


Lesenswert?

winne schrieb:
> @Sebastian
> Weshalb hast Du den Watchdog im Programm ?

Hallo winne,
der code stammt von erfinderjo. Ich versuche ihn lediglich zum laufen zu 
bekommen.


spess53 schrieb:
> Hi
>
>>Ist dann die Funktion des Programmes noch gegeben?
>
> Du hast den Sinn eines Watchdogs nicht begriffen. Der Ersteller des
> Programm warscheinlich auch nicht.
>
> MfG Spess

das mag wohl sein, aber anstelle mir zu zeigen was ich nicht kann, würde 
ich hilfreiche Tipps viel lieber lesen.

von winne (Gast)


Lesenswert?

Also im vollständigen Programm von erfinderjo kommen drei CLS vor.

1. Ini-bereich zum Start des Programms
2. If Pinc.3 = 1 Then                'Parameter in EEprom speichern
3. "Limits sind  ... gespeichert"

Schreibe anstelle CLS

LCD "CLS 1"
bzw.
LCD "CLS 2" und LCD "CLS 3"

Dann wirst du sehen welches CLS immer wieder ausgeführt wird
und Du kannst geziehlt den Fehler suchen.

von Sebastian M. (basti87)


Lesenswert?

winne schrieb:
> 1. Ini-bereich zum Start des Programms

Ja, du hast recht, der ist es :-(

von Sebastian M. (basti87)


Lesenswert?

Stefan schrieb:
> Mir fällt nochwas auf: Den Mikrofon-Verstärker hätte man auch mit einem
> simplen Transistor aufbauen können. Wichtiger scheint mir allerdings
> eine Entstörung der Speisung des Mikrofons, sonst kommt am Ausgang des
> OP-Amps die Störung der 5V Spannungsversorgung um (bis zu) Faktor 10
> Verstärkt wieder raus.

Das Problem bemerke ich jetzt auch, bekomme keine klaren signale. wie 
würdest du die geräuschmessung aufbauen?

von Karl H. (kbuchegg)


Lesenswert?

Schmeiss doch endlich den Watchdog raus bzw. leg ihn mittels der Fuses 
still.

Mittels Watchdog noch vorhandene Programmfehler zu kaschieren hat eh 
keinen Sinn. Und ob du in einer derart elktrisch verseuchten Umgebung 
mit dieser Lärmampel operierst, so das du einen Watchdog brauchst, der 
den µC alle paar Wochen wieder aus dem elektrisch durch nebenan laufende 
Motoren hervorgerufenen Fehlerzustand rausholt, ist eine ganz andere 
Frage, die nur du beantworten kannst.

Auf jeden Fall: wenn das BASCOM Programm nach der üblichen BASCOM Manier 
gestrickt ist, und mit haufenweise WAIT gespickt ist, dann ist ein 
Watchdog genau das, was du eigentlich nicht willst.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

> wie würdest du die Geräuschmessung aufbauen?

So: Beitrag "Re: Lärmampel von erfinderjo"

Der Op-Amp ist schon Ok.

von winne (Gast)


Lesenswert?

@Sebastian
So nun weist Du was passiert.

- Der Watchdog-"Sprung" wird regelmaßig ausgelöst und das Programm neu 
gestartet.

- Ist bestimmt nicht Sinn des Programms

- der erste CLS ist auch nicht der Fehler. Er zeigt nur deutlicher, was 
das Programm macht.

Mann könnte sagen:
- das Programm führt den Befehl "Reset Watchdog" nicht rechtzeitig aus 
und startet deshalb neu.

Jetzt gibt es mehrere Möglichkeiten das Programm lauffähig zu machen.
1. Du lässt das Programm so und suchst nach der Ursache.
- LCD "FLAG123.." an der richtigen Stelle hilft manchmal weiter.
- z.B. Wait(s) verkleinern z.B. (hast Du ja schon probiert)
- Autor fragen

oder aber
2. Du schmeisst den Watchdog komplett raus und bringst das Programm dann 
anders zum laufen.

Ich weiß nicht was sich der Autor des Programms bei derartiger 
Watchdog-Programmierung gedacht hat. Will ich auch nicht ergründen.
Ich hätte das anders und ohne Watchdog programmiert.

Wenn du Spass am Fummeln hast, bringst du das ganze bestimmt zum Laufen.

Viel Spass ;-)

von Joe (Gast)


Lesenswert?

Habe ich ca. 2005 auch schon gebaut.

Siehe auch:
The Safe Sound Indicator was developed over several years by the 
National Foundation for the Deaf from a concept by a 10-year-old New 
Plymouth girl, Jamie Fenton.

bzw.: 
http://www.schoolnews.co.nz/news/292-news-in-brief/1278-traffic-lights-control-classroom-noise

Der "Erfinder" hatte halt die Geschäftsidee.

Joe

von spess53 (Gast)


Lesenswert?

Hi

>Wenn du Spass am Fummeln hast, bringst du das ganze bestimmt zum Laufen.

Vielleicht läuft der ATMega8 auch nur einfach nicht mit den angegebenen 
8MHz. Dann wären die waits zu lang und der WD schlägt zu Recht zu.

>Ich hätte das anders und ohne Watchdog programmiert.

Nicht nur du.

MfG Spess

von winne (Gast)


Lesenswert?

@Spess
>Vielleicht läuft der ATMega8 auch nur einfach nicht mit den angegebenen
>8MHz. Dann wären die waits zu lang und der WD schlägt zu Recht zu.

Ja guter Tipp.

von Sebastian M. (basti87)


Lesenswert?

spess53 schrieb:
> Vielleicht läuft der ATMega8 auch nur einfach nicht mit den angegebenen
> 8MHz. Dann wären die waits zu lang und der WD schlägt zu Recht zu.

Aber die Taktrate ist doch im Programm angegeben.?

von Sebastian M. (basti87)


Lesenswert?

Wiso wurde der ADS zwei mal gestartet? Sind das zwei verschiedene, einer 
für die Akkuspannung und einer für das Mikrofon?

Ganz am Anfang:
1
Config Adc = Single , Prescaler = Auto , Reference = Internal

Und einmal unter dem Punkt Messen:
1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
2
Start Adc

von spess53 (Gast)


Lesenswert?

Hi

>Aber die Taktrate ist doch im Programm angegeben.?

Den Takt stellst du über die Fuses ein.

Das '$crystal = 8000000' sagt Bascom lediglich, das der Controller damit 
läuft. Aber nicht umgedreht.

MfG Spess

von winne (Gast)


Lesenswert?

Die Taktrate
>$crystal = 8000000
gibt nur dem Compiler an, mit welcher Frequenz später gearbeitet wird.

Du musst beim Programmieren darauf achten, dass die Fusebits auf 8MHz 
eingestellt sind.

Dazu musst Du deinen Programmer "fragen" ;-)

von Sebastian M. (basti87)


Lesenswert?

Joe schrieb:
> Habe ich ca. 2005 auch schon gebaut.
>
> Siehe auch:
> The Safe Sound Indicator was developed over several years by the
> National Foundation for the Deaf from a concept by a 10-year-old New
> Plymouth girl, Jamie Fenton.
>
> bzw.:
> 
http://www.schoolnews.co.nz/news/292-news-in-brief/1278-traffic-lights-control-classroom-noise
>
> Der "Erfinder" hatte halt die Geschäftsidee.
>
> Joe

Sind Sie "erfinderjo"?

von winne (Gast)


Lesenswert?

@Sebastian

Das schaffste doch selber oder ?

von spess53 (Gast)


Lesenswert?

Hi

>Sind Sie "erfinderjo"?

Dir ist aber aufgefallen, das die Titelseite der Hompage 3 Jahre nicht 
mehr verändert wurde?

MfG Spess

von Sebastian M. (basti87)


Lesenswert?

winne schrieb:
> @Sebastian
>
> Das schaffste doch selber oder ?

klar, Fuse ist "jetzt" gesetzt, schäm....

Das mit dem Watchdog ist trotzdem unschön, lasse ihn raus.


Die Messung haut jetzt noch nicht hin. Habe ein MCE 101 verbaut, ist das 
ggf. ein problem?

ich versuch mal ein kleines programm zu schreiben, was mir den pegel 
direkt anzeigt.

von winne (Gast)


Lesenswert?

Klar, macht doch viel mehr Spass was Eigenes zu programmieren.

von winne (Gast)


Lesenswert?

Hast du ein Oszi ? Wahrscheinlich nicht !

Dann schließ doch mal probeweise einen Kopfhörer an den Ausgang des 
LM324 an.

von Karl H. (kbuchegg)


Lesenswert?

Sebastian M. schrieb:

> Die Messung haut jetzt noch nicht hin. Habe ein MCE 101 verbaut, ist das
> ggf. ein problem?

Um eine Kalbrierung auf dein tatsächliches Mikrofon wirst du 
wahrscheinlich sowieso nicht umhinkommen.

> ich versuch mal ein kleines programm zu schreiben, was mir den pegel
> direkt anzeigt.

Hier
1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
2
Start Adc
3
Ao = 0
4
U2 = 0
5
For N = 1 To 500                                            'Gleichspannungswert ermitteln
6
 A1 = Getadc(0)
7
 Ao = Ao + A1
8
Next N
9
10
For N = 1 To 10                                             'Bateriespannung messen
11
 U = Getadc(1)
12
 U2 = U2 + U
13
Next N
14
15
Ao = Ao / 500                                               'Gleichspannungswert Lärmpegel festlegen
16
Au = Ao
17
Ao = 0
18
19
Ub = U2 / 10
20
Ub = Ub / 50.583
21
Up = Ub - 11.9
22
Up = Up * 100                                               'Akkuzustand in %
23
24
For N = 1 To 2000                                           'Lärmmessung
25
 A1 = Getadc(0)
26
 A2 = A1
27
If A2 > Ao Then Ao = A2                                     'Ermitteln der Extremwerte
28
If A2 < Au Then Au = A2
29
Reset Watchdog
30
 Next N
31
Stop Adc
32
Amp = Ao - Au                                               'Lärmamplitude rechnen
33
34
 Return

ist in dem BASCOM Programm die zentrale Messroutine, wobei hier sowohl 
Mikrofon als auch Akku ausgemessen werden.

Die Mikrofonmessung ist der Teil hier
1
For N = 1 To 2000                                           'Lärmmessung
2
 A1 = Getadc(0)
3
 A2 = A1
4
If A2 > Ao Then Ao = A2                                     'Ermitteln der Extremwerte
5
If A2 < Au Then Au = A2
6
Reset Watchdog
7
 Next N
8
Stop Adc
9
Amp = Ao - Au                                               'Lärmamplitude rechnen

also einfach 2000 Messungen, wobei über alle Messungen der Maximalwert 
bzw. Minimalwert festgestellt wird. Die Amplitude (und damit die 
Lautstärke) ist dann einfach nur die Differenz zwischen Maximum und 
Minimum.

Die allersten Maximum bzw. Minimum Werte stellt der Autor eher 
umständlich fest, indem er am Anfang der Routine erst mal den Mittelwert 
aus 500 Messungen nimmt. Hätte man sich auch sparen können, weil er in 
der 2000-er Schleife den Wert ja dann sowieso korrigiert. Wenn er mit 
einem Wert von 0 für Ao gestartet wäre und einem Wert von 1024 für Au 
wäre es auf genau das gleiche rausgelaufen. Nur einfacher.

Was mich an dem Programm stört ist, dass fast alle Variablen SINGLE 
sind.

Also das (das ganze Programm) kriegst du mit Sicherheit besser hin. Da 
steckt nicht viel dahinter.

von Sebastian M. (basti87)


Angehängte Dateien:

Lesenswert?

winne schrieb:
> Hast du ein Oszi ? Wahrscheinlich nicht !

Nee, leider nicht. Bin nur ein gelegenheits Hobbybastler.

winne schrieb:
> Dann schließ doch mal probeweise einen Kopfhörer an den Ausgang des
> LM324 an.

Das wird bestimmt lustig, kann mir garnicht vorstellen, was dort kommen 
könnte...

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ERSTMAL VIELEN DANK BIS HIER HIN, FÜR DIE GANZEN ANSÄTZE UND 
HILFESTELLUNGEN.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Ich würde vorschlagen, dass ich (wir) mich (uns) erstmal mit der 
Hardware auseinandersetze, damit wir dann später die Programme auch 
vernünftig testen können. Im Anhang der original Schaltplan so wie ich 
es lesen konnte, mit ersetzten Transistoren.

Die Spannungsstabilisierung für den Vorverstärker ändere ich später noch 
ab. Erkennt jemand irgendwelche Fehler, bzw. Problemquellen?

PS: Das Display funktioniert, war bloß zu faul es einzuzeichnen.

mfg

: Bearbeitet durch User
von winne (Gast)


Lesenswert?

@Sebastian
>PS: Das Display funktioniert, war bloß zu faul es einzuzeichnen.

Gewöhn Dir sowas gar nicht erst an. Das rächt sich später bei der 
Fehlersuche oder wenn Du eine Leiterplatte entflechten willst.


Einen Vorschlag zum Hardwaretesten hab ich auch noch.

Schreib ein neues einfaches Programm, was die Schalter abfragt.
Als Indikator kannst Du das dann auf dem Display anzeigen.
Und natürlich kannst Du so auch die Lampen und den Summer testen.

Frage den ADC(1) ab und lass dir die Betriebsspannung im Display 
anzeigen.

Display geht ja schon.

Wenn alles geht kannst Du dich auf den NF-Teil stürzen.

von Sebastian M. (basti87)


Lesenswert?

winne schrieb:
> Einen Vorschlag zum Hardwaretesten hab ich auch noch.
>
> Schreib ein neues einfaches Programm, was die Schalter abfragt.
> Als Indikator kannst Du das dann auf dem Display anzeigen.
> Und natürlich kannst Du so auch die Lampen und den Summer testen.
>
> Frage den ADC(1) ab und lass dir die Betriebsspannung im Display
> anzeigen.

Ist denn die Schaltung soweit funktionstüchtig, damit ich die ADC werte 
überhaupt richtig reinbekomme?

von Karl H. (kbuchegg)


Lesenswert?

Sebastian M. schrieb:

> Ist denn die Schaltung soweit funktionstüchtig, damit ich die ADC werte
> überhaupt richtig reinbekomme?

Sebastian. Du musst lernen auch mal etwas selbst auszuprobieren bzw. dir 
zu überlegen, wie du etwas (hier: die Funktionstüchtigkeit) nachweisen 
kannst.

Du hast an dieser Stelle 2 Themenkreise.
Das eine ist der ADC selber. Den kannst du testen, indem du den ganzen 
Mikrofon-Verstärker Schnickschnack erst mal weglässt und mit einem Poti 
als Spannungsteiler an den ADC gehst. Drehst du am Poti, muss sich der 
angezeigte Wert ändern.
Den anderen Teil kannst du testen, indem du zb an den Verstärker 
anstelle des ADC erst mal einen Lautsprecher anhängst. OK, der wird 
furchtbar krächzen, aber das ist erst mal egal. für dich wichtig ist: 
verstärkt das Ding oder verstärkt es nicht? Und das sollte eigentlich 
mit einem Lautsprecher, aus dem das was das Mikrofon aufnimmt lauter 
rauskommt nachgewiesen sein.

Da du weißt, dass der ADC funktioniert (hast du ja mit dem Poti 
nachgewiesen), hängst du jetzt mal beide Teile zusammen und schreibst 
dir ein Programm, welches den ADC-Pegel dauern ausgibt. Und dann 
positionierst du das Mikrofon vor der Stereoanlage und berieselst es. 
Der angezeigte ADC Wert muss sich verändern. Tut er das, dann 
funktioniert das ganze wohl. Also baust du das Programm weiter aus: 
Minimalwert feststellen, maximalwert feststellen, etc. etc.

Aber löse dich von der Vorstellung, dass du hier etwas präsentierst, 
irgendjemand gibt dann sein ok dazu, du baust das auf und alles 
funktioniert aus dem Stand heraus. Gerade das macht ja das Basteln aus: 
das man auch selber experimentiert und Dinge ausprobiert. Wenn etwas 
nicht funktioniert, dann grenzt man eben sinnvoll den nicht 
funktionierenden Bereich ein und probiert was anderes. Bzw. umgekehrt 
nimmt man eine Schaltung in Schritten in Betrieb, wobei man sich eine 
Reihenfolge überlegt, so dass man mit möglichst einfachen und wenig 
komplexen Teilsystemen anfängt und dann ein System nach dem anderen dazu 
nimmt (und das wenn möglich eigenständig testet). Sinn der Sache ist es, 
nicht am Ende mit einer Schaltung dazustehen, die man in einem Rutsch 
aufgebaut hat, die nicht funktioniert und man hat keine Ahnung, wo man 
mit Fehlersuche anfangen kann.
Ja, auch Profis arbeiten nach so einem schrittweisen Schema. Der 
Schlüssel zum Erfolg ist es, nicht alles auf einmal haben zu wollen, 
sondern die Komplexität in den Griff zu kriegen, in dem man das 
Komplettsystem in beherrsch- und testbare Einzelteile zerlegt. Genau aus 
dem Grund fängt man auch nicht damit an, gleich mal eine Platine zu 
zeichnen, sondern das ganze zb auf einem Steckbrett auszuprobieren, oder 
die Schaltung auf Loch- oder Streifenrasterplatine in Schritten 
aufzubauen.

: Bearbeitet durch User
von winne (Gast)


Lesenswert?

Sebastian M. schrieb:
>Ist denn die Schaltung soweit funktionstüchtig, damit ich die ADC werte
>überhaupt richtig reinbekomme?

Eben das sollst Du ja herausfinden. Schaltbild richtig zeichnen ist eine 
Sache. Versteckte Fehler muss man suchen. Dabei ist es egal ob selbst 
eingebrockt oder von erfinderjo übernommen.
Trau nur dem was Du selbst gemessen oder ausprobiert hast.

Du merkst wir helfen gern. Aber nicht bei allem.

;-)

von Sebastian M. (basti87)


Lesenswert?

Ok, geht klar.

Melde mich dann bei wenn ich soweit bin.
Schönes Wochenende.

mfg

von Winne Z. (rugbywinne)


Lesenswert?

ok viel Spass

von Sebastian M. (basti87)


Lesenswert?

Guten Morgen,

so ich habe etwas rumgespielt, mit einem normalem Poti, mit Basic,mit 
mehreren Widerständen und mit Kopfhörern.

Dann habe ich folgende Schaltung gefunden:

Beitrag "Re: Simpler Klatschschalter - dynamisch geht, elektret nicht"

Dabei höre ich über die Kopfhörer wenn ich über das Mikro streiche. Am 
AVR zeigt es mir einen Pegel von ca. 23 (Wert spielt keine rolle) durch 
erzeugen einer Lautstärker fällt der wert dann auch 0! Habe ich etwas 
falsch angeschlossen (LM324)? Denn ich würde gerne bei steigender 
Lautstärke einen steigenden Pegel haben.

mfg

von Sebastian M. (basti87)


Lesenswert?

Mit dem Programm habe ich das ausgelesen:


1
$regfile = "m8def.dat"
2
$crystal = 8000000
3
$hwstack = 100
4
$swstack = 100
5
$framesize = 100
6
7
' Taster
8
Config Pinc.2 = Input                                       '1
9
Config Pinc.3 = Input                                       '2
10
Config Pinc.4 = Input                                       '3
11
Config Pinc.5 = Input                                       '4
12
13
'Ausgänge
14
15
Config Pind.6 = Output                                      'grün
16
Config Pind.7 = Output                                      'gelb
17
Config Pinb.0 = Output                                      'rot
18
Config Pinb.1 = Output
19
20
'Variablen
21
Dim A1 As Word , U As Word
22
Dim A2 As Single , Amp As Single , Ao As Single , Au As Single , Grun As Single , Gelb As Single , Rot As Single
23
Dim Piezo As Single , Hsc As Single , Rotzeit As Single , Mw1 As Single , Mw As Single , Piezoaus As Single
24
Dim U2 As Single , Ub As Single , Up As Single , Sek As Single , Laufzeit As Single , Roth As Single
25
Dim I As Integer , J As Integer , K As Integer , N As Integer
26
Dim M As Byte , Prog As Byte , Rm As Byte , Pm As Byte , Laut As Byte
27
Dim Z As Long
28
29
30
'LCD Config
31
Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.5
32
Config Lcd = 16 * 2
33
Waitms 300
34
Initlcd
35
Cls
36
37
38
Locate 1 , 1
39
Lcd "Programm?"
40
41
Do
42
43
If Pinc.2 = 1 Then
44
 Gosub Tastertest
45
End If
46
47
If Pinc.3 = 1 Then
48
 Gosub Batt
49
End If
50
51
Loop
52
53
' +++++++++++++++ Tastertest +++++++++++++++++++++
54
Tastertest:
55
Cls
56
Locate 1 , 1
57
Lcd "Tastertest"
58
59
Do
60
61
' +++++++++++++++++++++++ S1 +++++++++++++++++++++++++
62
If Pinc.2 = 1 Then
63
 Locate 2 , 1
64
 Lcd "S1"
65
 Portd.6 = 1
66
 Wait 1
67
 Portd.6 = 0
68
End If
69
70
Locate 2 , 1
71
Lcd "          "
72
73
' +++++++++++++++++++++++++ S2 ++++++++++++++++++++++++
74
If Pinc.3 = 1 Then
75
 Locate 2 , 1
76
 Lcd "S2"
77
 Portd.7 = 1
78
 Wait 1
79
 Portd.7 = 0
80
End If
81
82
Locate 2 , 1
83
Lcd "          "
84
85
' +++++++++++++++++++++++++ S3 ++++++++++++++++++++++++
86
If Pinc.4 = 1 Then
87
 Locate 2 , 1
88
 Lcd "S3"
89
 Portb.0 = 1
90
 Wait 1
91
 Portb.0 = 0
92
End If
93
94
Locate 2 , 1
95
Lcd "          "
96
97
' +++++++++++++++++++++++++ S4 ++++++++++++++++++++++++
98
If Pinc.5 = 1 Then
99
 Locate 2 , 1
100
 Lcd "S4"
101
 Portb.1 = 1
102
 Wait 1
103
 Portb.1 = 0
104
End If
105
106
Loop
107
108
109
' +++++++++++++++++++++++++ Batteriespannung ++++++++++++++++++
110
Batt:
111
Cls
112
113
Do
114
Config Adc = Single , Prescaler = Auto , Reference = Avcc
115
Start Adc
116
117
 U = Getadc(1)
118
 U2 = U
119
120
 A1 = Getadc(0)
121
 Ao = A1
122
123
Stop Adc                                                    'Lärmamplitude rechnen
124
125
126
Locate 1 , 1
127
Lcd "" ; Fusing(u2 , "#####.") ;
128
Locate 1 , 8
129
Lcd "" ; Fusing(ao , "####.") ; "   "
130
wait 2
131
132
Loop

von spess53 (Gast)


Lesenswert?

Hi

> Gosub Tastertest

Bascom Hilfe:

With GOSUB, your program jumps to the specified label, and continues 
execution at that label.
When it encounters a RETURN statement, program execution will continue 
after the GOSUB statement.

Wo sind deinen RETURNs?

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

deinen -> deine

MfG Spess

von Sebastian M. (basti87)


Lesenswert?

spess53 schrieb:
> Hi
>
>> Gosub Tastertest
>
> Bascom Hilfe:
>
> With GOSUB, your program jumps to the specified label, and continues
> execution at that label.
> When it encounters a RETURN statement, program execution will continue
> after the GOSUB statement.
>
> Wo sind deinen RETURNs?
>
> MfG Spess

Hab ich absichtlich weggelassen, damit ich die aktuellen werte dauerhaft 
angezeigt bekomme. Ist nur zu testzwecken.

von Alter Sack (Gast)


Lesenswert?

... "früher" hätte man sowas mit einem LM3915 gemacht!

von Sebastian M. (basti87)


Lesenswert?

Alter Sack schrieb:
> ... "früher" hätte man sowas mit einem LM3915 gemacht!

Habe ich auch schon öfter gelesen, habe aber nur die LM324Ner.
Brauche nur einen steigenden Pegel bei steigender Lautstärke.

Hat jemand einen Lösungsvorschlag?

von Alter Sack (Gast)


Lesenswert?

Äh, nee, der LM3915 ist, einfach gesagt, ein Pegel -> LED Umsetzer, den 
man in VU Metern verwendet. Der LM324 ist ein Op-Amp.

Wenn man mehrere Ausgänge zusammenfassr (die Ausgänge sind Open 
Collector), kann man sicher auch die drei Treiber für die Ampel steuern. 
Er erspart Dir den ganzen uC Kram.

Schau mal hier:

Beitrag "Lautstärkeampel mit LM3915"

oder gleich hier:

http://www.mikrocontroller.net/search?query=LM3915

von Winne Z. (rugbywinne)


Lesenswert?

@Sebastian

Was hälst Du hiervon ?
1
' +++++++++++++++++++++++ S1 +++++++++++++++++++++++++
2
If Pinc.2 = 1 Then
3
4
 Locate 2 , 1
5
 Lcd "S1"
6
 Portd.6 = 1
7
8
else if
9
10
 Locate 2 , 1
11
 Lcd "  "
12
 Portd.6 = 0
13
14
End If

waits unterbrechen den Programmablauf. Sollte man nach Möglichkeit 
anders programmieren.

2.
1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
2
Start Adc
setzt Du an den Anfang des Programms. z.B. hinter config LCD.
1
STOP Adc
Brauchst Du in deinem Programm nicht.

3. fehlende Returns
Sowas gewöhn dir nicht erst an.

Das Programm springt sonst irgendwo hin, wo Du keine Übersicht mehr 
hast.

Empfehlung
1
' Start Initialisierung
2
3
config ect...
4
5
Lable_Hauptprogramm:
6
7
    ...
8
    GOSUB SUB_Tastenabfrage
9
    ...
10
    GOSUB SUB_ADC-Abfrage
11
12
GOTO Lable_Hauptprogramm
13
14
15
' Subroutinen
16
SUB_Tastenabfrage:
17
    ...
18
RETURN
19
20
SUB_ADC-Abfrage:
21
    ...
22
RETURN

: Bearbeitet durch User
von Winne Z. (rugbywinne)


Lesenswert?

@Sebastian
> Denn ich würde gerne bei steigender
> Lautstärke einen steigenden Pegel haben.

Das geht so mit deinem Programm und deiner Schaltung nicht.

Ich versuchs mal einfach zu erklären:

Du hast am Prozessoreingang das Signal deines Verstärkers zu "liegen".
Dieses Signal besteht aus einem Gleichspannungsanteil und einem 
Wechselspannungsanteil.
Der Gleichspannungsanteil ist normalerweise immer vorhanden, auch wenn 
kein Ton vorhanden ist.
Der Wechselspannungsanteil ist Dein Tonsignal. Einfach gesangt: "je 
größer desto laut" ;-)

Der Gleichspannungsanteil wird durch den Kondensator zwischen LM324 und 
Prozessor "herausgefiltert".

Was du auswerten willst ist ja der Wechselspannungsanteil.
Dies geht aber nicht so einfach wie du es in deinem Programm (mit einer 
Zeile) geschrieben hast.

Schau dir mal das Programm von Erfinderjo an.
Dort wird für eine bestimmte Anzahl von Messungen der höchste und der 
niedrigste Wert ermittelt. Das ist eine Möglichkeit.

Dazu sollte aber deine Hardware also dein Verstärker funktionieren.

Wenn Du die originale Schaltung mit dem LM324 aufbaust sollte es auch 
funktionieren.
Schließe einen Lautsprecher oder Kopfhörer probeweise an den Ausgang des 
LM324 an.
Hörst Du was aus dem Lautsprecher/Kopfhörer, wenn Du auf's Mikrofon 
klopfst ?
Wenn ja funktioniert Dein Verstärker und Du kannst am Programm 
weitermachen. Mit dem Poti kannst Du wahrscheinlich die Lautstärke 
einstellen.

von Sebastian M. (basti87)


Lesenswert?

Winne Z. schrieb:
> @Sebastian
>
> Was hälst Du hiervon ?

Hey, ja das werde ich dann berücksichtigen, wenn ich das Programm neu 
schreibe. Wollte jetzt erstamal das Programm von erfinderjo zum laufen 
bekommen, damit die Lärmampel wenigstens eine Funktion hat.

Winne Z. schrieb:
> Hörst Du was aus dem Lautsprecher/Kopfhörer, wenn Du auf's Mikrofon
> klopfst ?

Ja, klar und deutlich. Ist eigendlich ganz lustig.

Mit dem Programm von erfinderjo, klappt jetzt soweit auch alles, bis auf 
einen kleinen Fehler:

Nach dem Einschalten und Auswählen (Kantine oder Hausaufgaben) komme ich 
zu folgender Anzeige (Anzeige 1:). Da wird mir ein Pgl. von 2 bei 
vollkommener Stille angezeigt und steigend bei steigender Lautstärke.

Was aber verwunderlich ist, das auch bei einem Pegel von 2 die gelbe LED 
blinkt, und die rote dauerhaft leuchtet. Wenn ich dann die Schwellen 
über das LCD einstellen möchte, stehen da bei allen die Werte 0.

Ich vermute das liegt daran, dass die Werte aus dem Eeprom gelesen 
werden, welcher aber keine Werte hat, denn anfangs werden die zwar 
festgelegt,
1
'Settings
2
Prog = 1
3
...
4
Laut = 1
5
Hsc = 0
6
Grun = 5
7
Gelb = 80
8
Rot = 100
9
...

aber dann später aus dem Eprom geladen, welche eigendlich dann wieder zu 
0 werden.
1
Parameter:
2
If Prog = 1 Then                                            'Je nach Rezept entsprechende Parameter aus dem EEprom laden
3
Readeeprom Grun , &H11
4
Readeeprom Gelb , &H15
5
Readeeprom Rot , &H19
6
Readeeprom Piezo , &H1D
7
Readeeprom Laut , &H21
8
End If
9
If Prog = 2 Then
10
Readeeprom Grun , &H25
11
Readeeprom Gelb , &H29
12
Readeeprom Rot , &H2D
13
Readeeprom Piezo , &H31
14
Readeeprom Laut , &H35
15
End If

Oder hat jemand eine andere Idee?

von Sebastian M. (basti87)


Lesenswert?

Guten Tag,

habe es nun ausprobiert und es funktioniert alles!!!

Vielen Danke an alle, die mich unterstützt haben ;-)

--------------o00o---- '(_)'----o00o---------------
--------------------D-A-N-K-E----------------------

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.