Forum: Mikrocontroller und Digitale Elektronik Problem mit Tonerzeugung


von Bernd .. (timoteus)


Lesenswert?

Hallo!

Ich bin AVR-Einsteiger und habe folgendes Problem:

Mit dem unten aufgeführten Programm erzeuge ich einen Dauerton.
Durch die Verwendung von Timer1 wird dazu kein weiterer Programmschritt
benötigt, der AVR ist arbeitslos (siehe Roland Walters Lehrbuch S.114).

Nun möchte ich aber den Ton im weiteren Programm ein- und ausschalten
können, z.B. im Takte von Morsezeichen. Bis jetzt habe ich noch keine
saubere Lösung gefunden, wie ich dies realisieren kann.

Habe bisher versucht, zum ausschalten den PIN PB1 zum ausschalten als
Eingang zu definieren, aber das funktioniert leider nicht so wie
gewünscht.

Frage an die Freaks: Wie kann ich das lösen?

Danke im voraus,
Bernd


'====================================================================
' BASCOM - ATMega 8-16  - Tonausgabe mit Timer 1 (1,0017391 ... kHz)
' Speaker an Pin PB1
'====================================================================

$Refile = "m8def.dat"
$Crystal = 3686400

DDRB.1 = 1        ' Pin PB1 auf Ausgang

TCCR1A = &B01000000      ' Pin PB1 togglen, Kein PWM
TCCR1B = &B00001010      ' Timer-Reset bei Compare, Clock/8

Compare 1A = 230      ´ Vergleichswert setzen


Do          'Der AVR ist vorerst arbeitslos
   nop          'hier soll später der Ton
Loop          'ein-aus getastet werden


End

von RonnyRoster (Gast)


Lesenswert?

im timer-interrupt eine variable abfragen, ob der ton ausgegeben werden 
soll, oder nicht.

Und die dann im Hauptprogramm setzen, bzw löschen.

von Lehrmann M. (ubimbo)


Lesenswert?

RonnyRoster schrieb:
> im timer-interrupt

er meint die ISR

RonnyRoster schrieb:
> eine variable abfragen

er meint eine globale Variable

von Bernd .. (timoteus)


Lesenswert?

Hallo RonnyRoster,

danmke für den schnellen Hinweis.
Aber im Moment stehe ich auf dem Schlauch
(wie bereits angemerkt: bin Einsteiger).
Wie muss das mit der Variablen denn im
Listing aussehen ?

Bernd

von Bernd .. (timoteus)


Lesenswert?

Hallo auch Michael,

stehe leider immer noch im Wald ...
Wo genau muss die Variable eingebaut werden ?

Bernd

von RonnyRoster (Gast)


Lesenswert?

Sorry, hab grad meinen Fehler gesehen. Da du anscheinend den Timer 
direkt zur Ausgabe nutzt, hast du auch keine Timer ISR in der du 
Variablen abfragen kannst.

Versuch mal in der Main-Schleife das 6. Bit im TCCR1A zu löschen bzw das 
ganze register auf 0 zu setzen und zum Ton ausgeben dann wieder wie oben 
zu setzen.

Viel Glück

von Bernd .. (timoteus)


Lesenswert?

Hallo RonnyRoster,

Klasse! Danke für den Tipp.
Das ganze Register TCCR1A löschen (TCCR1A = &B00000000)
funktioniert zum Ausschalten. Und mit TCCR1A = &B01000000
lässt sich der Sound wieder einschalten.

Danke!

Gruss,
Bernd

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.