Bascom Timingproblem "Rogerbeep mit ATTiny13"

dg2iaq

Neues Mitglied
23. Okt. 2013
4
0
0
Sprachen
Hallo zusammen,

bin neu hier im Forum, weil ich ein Problem mit der Programmierung eines ATTiny13 habe.

Ich habe für ein Funkgerät eine Rogerpiep-Schaltung nachgebaut (funktioniert auch)
http://www.mydarc.de/dl1rlb/programmierung.html

Dieser Rogerpiep ist aber dauerhaft eingeschaltet, sofern man ihn nicht als optional steckbares Zwischenmodul aufbaut.

Den Originalcode habe ich inzwischen etwas abgewandelt und bei Drücken noch einen einleitenden Doppelsummton inplementiert.

Also so:
Sendetaste drücken - "brrr-brrr" - (Gespräch führen) - Sendetaste loslassen - "piep"

Zunächst hatte ich durch den zusätzlichen Vor-Ton plötzlich ein Timingproblem, da die Töne nicht zuverlässig kamen bzw. manchmal ausblieben.
Durch Vergrößern des Kondensators an PinB.4 von 100nF auf 1µF war das Problem beseitigt.
Je nach zeitlichem Zusammentreffen der Änderung des Sendetastenstatus mit der Programmloop kam das System wohl manchmal aus dem Tritt !?
Durch den verzehnfachten Kondensatorwert ergibt sich wohl eine bessere "Entprellung" und alles läuft zuverlässig.


Nun wollte ich den Programmiercode noch etwas "verfeinern", da ich noch einen "richtigen" EIN-/AUS-Schalter am Port B.3 angebracht habe, um den Bausatz nicht mechanisch trennen zu müssen.

Diesen Schalterstatus möchte ich nun abfragen und davon die Ausgabe oder Unterdrückung der Pieptöne abhängig machen.

Das klappt zwischenzeitlich auch, aber nicht immer zuverlässig !
Als hätte ich schon wieder ein Timingproblem !!??


Am PortB.3 sitzt inzwischen auch ein 1µF Kondensator nebst Schalter nach Masse (also vom Prinzip identisch zur Sendetaste an PortB.4, nur eben von Zustand mehr "statisch" und nicht so "kurz" verwendet wie die Sendetaste).

Der Intro-Ton wird zuverlässig abgeschaltet, aber der End-Rogerbeep wird (zwar selten, aber immerhin) dennoch unterdrückt.

An was kann das liegen ?

Das Programm durchläuft doch permanent akribisch die Loop und arbeitet Zeile-für-Zeile und Zustand-für-Zustand ab ?
Wo kann da (unregelmässig) etwas "verschluckt" werden ? Das verstehe ich nicht.

Besten Dank schon jetzt für Eure Antworten.

Gruß
Jochen

2013-10-23_142157.png
 
Hallo Jochen,
ich glaube deine Frage ist hier irgendwie übersehen worden.
Dein Programm funktioniert bei mir, allerdings habe ich keinen Tiny13 zur Hand und habe es mit einem M88p getestet.
Die größeren Kondensatoren an den Tastern würde ich nicht machen.
Das führt nur zu einem Kurzschluss Entladen über den Taster, also ganz weglassen oder noch viel kleiner.
Entprelle den lieber im Programm, dass funktioniert besser.
Dein Code sieht dann so aus:
Code:
'Rogerpiep von DK5RF'
$regfile = "m88pdef.dat"
'$regfile = "attiny13.dat"
$crystal = 1200000
Config Portb.1 = Output
Config Portb.3 = Input
Config Portb.4 = Input
Dim Tx As Bit
Portb.3 = 1
Portb.4 = 1
Tx = 0
Do
   Debounce Pinb.4 , 0 , Brrr_brrr , Sub
   Debounce Pinb.4 , 1 , Piep , Sub
Loop
Brrr_brrr:
   If Pinb.4 = 0 And Tx = 0 Then
      Portb.1 = 1
      Tx = 1
      If Pinb.3 = 0 Then
         Sound , Portb.2 , 40 , 35
         Waitms 100
         Sound , Portb.2 , 40 , 35
      End If
   End If
Return
Piep:
   If Pinb.4 = 1 And Tx = 1 Then
      If Pinb.3 = 0 Then
         Sound , Portb.2 , 100 , 75
      End If
      Portb.1 = 0
      Tx = 0
   End If
Return
 
Ihr braucht B4 in den Subs nicht nochmals prüfen; das folgt doch aus dem debounce.
Tx scheint auch keinen Sinn mehr zu haben, damit kann dann also je die ganze If-Verzweigung raus.
Außerdem fehlt der Pullup am Reset (oder soll RSTDSBL programmiert werden?)
 
Hallo Jochen,
ich glaube deine Frage ist hier irgendwie übersehen worden.

Hallo Rolf,

DIESEN Eindruck hatte ich auch... :D :D

Ganz herzlichen Dank für Deine Hilfe !

Habe gerade den ATTiny13 mit Deinem überarbeiteten Quellcode gebrannt und nun läuft's perfekt !

Es ergibt sich nur eine Änderung:
Wenn der Rogerpiep ohne EIN/AUS-Schalter betrieben werden soll (also z.B. als Steckmodul, das ggf. wieder weggenommen wird), dann muss für "Rogerpiep ständig EIN" einfach eine Massebrücke an PORTB.3 gesetzt werden. In meinem Quellcode war's gerade umgekehrt. Der PortB.3 war immer auf 1 und das hätte das "EIN" darstellen sollen, also z.B. auch bei nicht verkabeltem PORTB.3.

Das ist nun aber nur "Kosmetik" und überhaupt kein Problem. Man muss es halt nur wissen und ggf. schaltungstechnisch darauf reagieren.

Ich kann zwar Funkgeräte umbauen und auch klanglich modifizieren, aber bei Programmiersprachen hört's dann auf (...denn diese haben leider keinen Lötkolben !! :D )

Also vielen Dank nochmals. In meinem Testboard habe ich übrigens die beiden Kondensatoren derzeit noch probeweise belassen und damit läuft Dein Code auch problemlos.

Gruß
Jochen
 
Ihr braucht B4 in den Subs nicht nochmals prüfen; das folgt doch aus dem debounce.
Tx scheint auch keinen Sinn mehr zu haben, damit kann dann also je die ganze If-Verzweigung raus.
Außerdem fehlt der Pullup am Reset (oder soll RSTDSBL programmiert werden?)

Danke für Deine Info.

Da Rolf's Quellcode derzeit super läuft, verfahre ich vorerst getreu dem Microsoft-Motto: "Never touch a running system !". :D

An meinem Testboard werde ich am RESET-Pin mal einen 4k7 nach +5V schalten. Davon hatte ich in diversen AVR-Quellen auch schon gelesen.
Da mein Rogerpiep aber immer problemlos lief und auch beim Originalautor kein Widerstand verzeichnet war, ließ ich ihn bisher weg.

Bisher habe ich mir nur neben meinem Testboard (für diverse Quellcode- bzw. praktische Tonversuche) eine SMD-Zwischensteckversion gebaut.
Da man diese durch die Mikrofonstecker sofort trennen könnte, sah ich bisher keinen Bedarf des PullUp-Widerstandes.

Bei einer Festeinbauvariante ins Gerät wäre das jedoch noch ein Aspekt, da man hier nicht mehr so leicht heran kommt.

Gruß
Jochen
 
BTW, hier noch ein paar Bilder.

Diese "Kategorie" dürfte man hier im Forum eher selten antreffen.
Ich hoffe, es gefällt.

Gruß
Jochen
 

Anhänge

  • 20131006-162330-DSCN2031.jpg
    20131006-162330-DSCN2031.jpg
    235,3 KB · Aufrufe: 16
  • 20131020-154934-DSCN2153.jpg
    20131020-154934-DSCN2153.jpg
    225,9 KB · Aufrufe: 18
  • 20131020-160212-DSCN2159.jpg
    20131020-160212-DSCN2159.jpg
    247,9 KB · Aufrufe: 14
  • 20130620-092732-DSCN0812.jpg
    20130620-092732-DSCN0812.jpg
    222,9 KB · Aufrufe: 16
Nunja, theoretisch könnte durch vorheriges debounce, sound o.ä. das nächste debounce wirksam werden, während Du die Taste grad losläßt oder drückst. Du landest halt gerade noch so in der entsprechenden Sub, inzwischen (Sprung usw) kann sich aber jetzt der Pegel am Pin geändert haben, die IF-Bedingung also nicht mehr erfüllt sein. Entsprechend würde der dortige Code nicht ausgeführt werden -> Tx den falschen Zustand behalten, was auch das If in der anderen Sub beim nächsten mal verhindert.

Mit dem Reset-Pullup ist das so'ne Sache: Figure8-1 im Datenblatt (S.34) zeigt einen internen Pullup - es gaht ja bei allen(?) AVR auch ohne (also mit offenem Pin). die Frage ist bloß, ob es sich bei diesem Widerstand um den normalen (also bei jedem Pin vorhandenen) Pullup (der mit DDRx.n=0 und PORTx.n=1 aktiviert wird) handelt. Denn dann wäre dieser durch PUD in MCUCR (Pullup Disable) mitbetroffen, und könnte so deaktiviert werden.
(Figure 10-2 Seite 49). In dem Moment wäre der Pin dann eine Antenne.

Zu der Sache mit dem Schalter an B3: am sinnigsten wäre, hi für ein und lo für aus festzulegen. B3 selbst als Eingang mit Pullup (DDR=0, Port=1). Der Schalter verbindet den Pin dann (wenn geschlossen) gegen Gnd, um den Beep-er abzuschalten. Wenn kein Schalter angeschlossen wird, verhält sich alles so, als wenn er offen wäre...

Edith sagt, daß sich das mit einem ATtiny4/5/9/10 wesentlich kleiner aufbauen lassen würde - allerdings unter Verwendung des Reset-Pins also I/O.
Aber dann bist Du mit Bascom raus - das unterstützt nämlich das Tiny Programming Interface (noch(?)) nicht...
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)