Anzeige:

piepserfrequenz per poti

Hier finden sie die archivierten Beiträge des alten PHPBB Forums von www.loetstelle.net

piepserfrequenz per poti

Von savag am 07.06.2009 15:21

Hi,
habe mir vor ein paar tagen das myavr USB Board mit LCD gekauft, bin so bis jetzt ganz zufrieden.
Habe auch schon mit Bascom diverse sachen gemacht, natürlich nur anfäger sachen, also LCD ansteuern und das Taster LED`S oder schriften steuern.

Nun wollte ich mal versuchen die Frequenz des Piepsers per ADC bzw per Poti zu steuern, leider kommt da nur müll raus, wenigstens etwas :)

Aber wie könnte ich das richtig realisieren?
hatte es schon so versucht das der wert vom ADC eine Variable bei Wait steuert
also:

Portd.0=1
wait ADC
Portd.0=0
das würde ein rechteck erzeugen mit meiner Zeitvariablen aber leider kann man Wait so was nicht zuordnen was gibt es noch für möglichkeiten.

Von savag am 07.06.2009 15:51

Bin gerade auf eine Lösung gestoßen, aber wenn ihr noch andere kennt würden die mich auch interssieren Smile

Hier ist mein Funktionsfähiges konzept.

Code:
$regfile = "m8def.dat"

$crystal = 3686411

Config Portb.1 = Output
Config Portc.1 = Input

Dim Ad as integer

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

Do

Ad = Getadc(0)
Ad = Ad \ 10
Ad = Ad + 10

Sound Portb.1 , Ad , Ad

Loop
End

Von pcprofi am 07.06.2009 16:11

Quellcode mal in Code-Tags gesetzt...

Was ist denn das für ein Piepser? Hat der ne eingebaute Elektronik? Wenn ja, dann wirst du es schwer haben mit einer Frequenzänderung...

Gruß Rainer

Re: piepserfrequenz per poti

Von Sam am 07.06.2009 16:40

savag hat folgendes geschrieben:

hatte es schon so versucht das der wert vom ADC eine Variable bei Wait steuert
also:

Portd.0=1
wait ADC
Portd.0=0
das würde ein rechteck erzeugen mit meiner Zeitvariablen aber leider kann man Wait so was nicht zuordnen was gibt es noch für möglichkeiten.


Du könntest statt
Code:
Portd.0=1
wait ADC
Portd.0=0


folgendes schreiben:
Code:
Portd.0=1
for i=1 to ADC
waitus 10
next
Portd.0=0


MfG Sam

Re: piepserfrequenz per poti

Von pcprofi am 07.06.2009 16:44

Sam hat folgendes geschrieben:

Code:
Portd.0=1
for i=1 to ADC
Wait 1
next
Portd.0=0


MfG Sam


Vorsicht: Der WAIT-Befehl wartet die Variable in SEKUNDEN!

Wahrscheinlich wirst ud hier mit waitus arbeiten müssen - allerdings glaube ich, dass selbst µs noch zu lang sind, um eine vernünftige Frequenz hinzubiegen.

Wie wäre es mit dem Befehl "SOUND Pin, Duration, Pulses"??

http://avrhelp.mcselec.com/sound.htm

Der Befehl arbeitet immer nur dann, wenn er mit diesen Parametern aufgerufen wird - du müsstest nur den ADC-Wert was umrechnen und in die Pulses-Variable reinspeichern, dann den Befehl aufrufen...

Gruß Rainer

Gruß Rainer

Re: piepserfrequenz per poti

Von Sam am 07.06.2009 16:53

pcprofi hat folgendes geschrieben:
Sam hat folgendes geschrieben:

Code:
Portd.0=1
for i=1 to ADC
Wait 1
next
Portd.0=0


MfG Sam


Vorsicht: Der WAIT-Befehl wartet die Variable in SEKUNDEN!

Wahrscheinlich wirst ud hier mit waitus arbeiten müssen - allerdings glaube ich, dass selbst µs noch zu lang sind, um eine vernünftige Frequenz hinzubiegen.

Ja, das ist mir nach einer Minute auch aufgefallen. Schon abgeändert.
Warum soll das mit µs nicht hinkommen. Das menschliche Ohr hört bis 20kHz. Wenn wir den Code so schlimm mit einberechnen, dass er pro Aus-/Einschalten 10 Takte braucht, gibt das immernoch eine Frequenz von 100kHz. Deshalb habe ich es mit "WAITUS 10" gemacht.

pcprofi hat folgendes geschrieben:

Wie wäre es mit dem Befehl "SOUND Pin, Duration, Pulses"??


Das geht leider auch nicht, da der Sound-Befehl keine Variablen zulässt.

Von pcprofi am 07.06.2009 17:40

Dann bleibt nur deine Lösung...

Gruß Rainer

Von BellaD am 07.06.2009 18:03

Moin

da ich mit Bascom nix am Hut hab ,aber trotzdem auch in anderen Foren unterwegs bin Wink schau dir mal diesen Thread
http://www.mikrocontroller.net/topic/137629#new
an.

Von Sam am 07.06.2009 18:10

BellaD hat folgendes geschrieben:
Moin

da ich mit Bascom nix am Hut hab ,aber trotzdem auch in anderen Foren unterwegs bin Wink schau dir mal diesen Thread
http://www.mikrocontroller.net/topic/137629#new
an.

Da wird alles mit Interrupts geregelt. Natürlich auch eine Idee. Da ist nur viel Rechnarbeit notwendig.

Von BellaD am 07.06.2009 18:18

Das geht hauptsächlich mit Timern -
du könntest auch einen Timer so starten das er dir eine Freq. von ca. 440 Hz ausgibt . In die Timer Register kopierst du die ADC Werte.Um den Ton zu starten startest du den Timer , um ihn zu stoppen den Timer anhalten.
Schon kannst du verschiedene Töne erzeugen

Anzeige: