peter51d
Geocacher
Das erste Telefon, ein Tel0164 mit 3x4 Tastatur läuft.
Ich bin vom Tiny 13 auf einen mega8 gegangen und habe mir ein Codeschloss Programm aus dem Netz umgestrickt.
Das nächste Projekt, ein Wählscheibentelefon 611-2 läuft im Prinzip auch. Hier ist ein Tiny13 verbaut.
Wird die richtige Nummer gewählt, erfolgt über ein Voicemodul die Ansage der Informationen.
Stimmt die Nummer nicht, wir ein "kein Anschluss unter dieser Nummer" Rufzeichen abgespielt.
Nun zu meinem Problem:
Ich kann maximal eine 4 Stellige Rufnummer auswerten.
Versuche ich eine längere Rufnummer zu programieren, bekomme ich einen "out of sram" Fehler.
den HWStack habe ich schon auf 10 runter gesetzt, damit es überhaubt klappt.
Jetzt suche ich hier Hilfe, für die Programmoptmierung, bzw auch für einen gänzlich anderen Ansatz für das Programm.
Ich würde gerne die Möglichkeit haben min 6, besser 8 Ziffern auszuwerten. Es soll aber zwingend der ATTiny13 verwendet werden.
Hier das aktuelle Programm:
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 10
'Codeabfrage über Wählscheibentelefon
'Ein und Ausgänge konfigurieren
Config Pinb.0 = Input
Config Pinb.1 = Input
Config Pinb.2 = Output
Config Pinb.3 = Output
Config Pinb.4 = Output
'Alias Namen zuweisen
Falsch Alias Portb.2 'rufzeichen "kein Anschluss unter dieser Nummer"
Nsi Alias Pinb.1 'Impulsleitung vom Nummernschalter
Nsa Alias Pinb.0 'Nummernschalterkontakt, für Wählscheibe dreht oder steht
Ansage Alias Portb.3 'Ansage der Informationen
Bereit Alias Portb.4 'Wählbereitschaft anzeigen
'Interne pullups zuschalten
Portb.0 = 1
Portb.1 = 1
'Variablen zuweisen
Dim A As Byte 'Anzahl der Impulse pro Wahlvorgang
Dim Zahl1 As Byte 'erste gewählte Ziffer
Dim Zahl2 As Byte 'zeite gewählte ziffer
Dim Zahl3 As Byte 'dritte gewählte ziffer
Dim Zahl4 As Byte 'vierte gewählte Ziffer
'Alle Variablen auf Null setzen
A = 0
Zahl1 = 0
Zahl2 = 0
Zahl3 = 0
Zahl4 = 0
'Alle Ausgänge auf 1 setzen
Falsch = 1
Ansage = 1
Bereit = 1
'Hauptprogrammschleife
'Abfrage des Nummernschalters
Do
Bereit = 1 'Wählbereitschaft anzeige
Debounce Nsi , 1 , Impulse , Sub 'Impulsschalter entprellen und Sprunganweisung
Debounce Nsa , 1 , Auswerten , Sub 'Wählscheibe abgelaufen entprellen und Sprunganweisung
Loop
'Implse hochzählen
Impulse:
Bereit = 0
A = A + 1
Return
'Impulsanzahl auswerten und den zuweisen an welcher Stelle die Ziffer gewählt wurde
'Wenn letzte Ziffer gewählt, zur Codekontrolle springen
Auswerten:
If Zahl4 = 0 And Zahl3 <> 0 Then
Zahl4 = A
End If
If Zahl3 = 0 And Zahl2 <> 0 Then
Zahl3 = A
End If
If Zahl2 = 0 And Zahl1 <> 0 Then
Zahl2 = A
End If
If Zahl1 = 0 Then
Zahl1 = A
End If
If Zahl4 <> 0 Then
Gosub Kontrolle
End If
A = 0 'Var a für nächste Wahl zurücksetzen
Return
'konrollieren ob die gewählte Nummer richtig ist
Kontrolle:
Bereit = 0
If Zahl1 <> 3 Then 'Vergleiche erste gewählte Ziffer mit vorgegebener Ziffer
Falsch = 0 'wenn falsch dann Rufzeichen "kein Anschluss unter dieser Nummer"
End 'und Programm beenden
End If 'wenn richtig weiter
If Zahl2 <> 3 Then
Falsch = 0
End
End If
If Zahl3 <> 4 Then
Falsch = 0
End
End If
If Zahl4 <> 9 Then
Falsch = 0
End
End If
Ansage = 0 'wenn alle Ziffern stimmen, Ansage der Informationen
End
Ich danke euch schon mal im voraus für eure Hilfe und wünsch erst mal einen "Guten Rutsch".
Ich bin vom Tiny 13 auf einen mega8 gegangen und habe mir ein Codeschloss Programm aus dem Netz umgestrickt.
Das nächste Projekt, ein Wählscheibentelefon 611-2 läuft im Prinzip auch. Hier ist ein Tiny13 verbaut.
Wird die richtige Nummer gewählt, erfolgt über ein Voicemodul die Ansage der Informationen.
Stimmt die Nummer nicht, wir ein "kein Anschluss unter dieser Nummer" Rufzeichen abgespielt.
Nun zu meinem Problem:
Ich kann maximal eine 4 Stellige Rufnummer auswerten.
Versuche ich eine längere Rufnummer zu programieren, bekomme ich einen "out of sram" Fehler.
den HWStack habe ich schon auf 10 runter gesetzt, damit es überhaubt klappt.
Jetzt suche ich hier Hilfe, für die Programmoptmierung, bzw auch für einen gänzlich anderen Ansatz für das Programm.
Ich würde gerne die Möglichkeit haben min 6, besser 8 Ziffern auszuwerten. Es soll aber zwingend der ATTiny13 verwendet werden.
Hier das aktuelle Programm:
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 10
'Codeabfrage über Wählscheibentelefon
'Ein und Ausgänge konfigurieren
Config Pinb.0 = Input
Config Pinb.1 = Input
Config Pinb.2 = Output
Config Pinb.3 = Output
Config Pinb.4 = Output
'Alias Namen zuweisen
Falsch Alias Portb.2 'rufzeichen "kein Anschluss unter dieser Nummer"
Nsi Alias Pinb.1 'Impulsleitung vom Nummernschalter
Nsa Alias Pinb.0 'Nummernschalterkontakt, für Wählscheibe dreht oder steht
Ansage Alias Portb.3 'Ansage der Informationen
Bereit Alias Portb.4 'Wählbereitschaft anzeigen
'Interne pullups zuschalten
Portb.0 = 1
Portb.1 = 1
'Variablen zuweisen
Dim A As Byte 'Anzahl der Impulse pro Wahlvorgang
Dim Zahl1 As Byte 'erste gewählte Ziffer
Dim Zahl2 As Byte 'zeite gewählte ziffer
Dim Zahl3 As Byte 'dritte gewählte ziffer
Dim Zahl4 As Byte 'vierte gewählte Ziffer
'Alle Variablen auf Null setzen
A = 0
Zahl1 = 0
Zahl2 = 0
Zahl3 = 0
Zahl4 = 0
'Alle Ausgänge auf 1 setzen
Falsch = 1
Ansage = 1
Bereit = 1
'Hauptprogrammschleife
'Abfrage des Nummernschalters
Do
Bereit = 1 'Wählbereitschaft anzeige
Debounce Nsi , 1 , Impulse , Sub 'Impulsschalter entprellen und Sprunganweisung
Debounce Nsa , 1 , Auswerten , Sub 'Wählscheibe abgelaufen entprellen und Sprunganweisung
Loop
'Implse hochzählen
Impulse:
Bereit = 0
A = A + 1
Return
'Impulsanzahl auswerten und den zuweisen an welcher Stelle die Ziffer gewählt wurde
'Wenn letzte Ziffer gewählt, zur Codekontrolle springen
Auswerten:
If Zahl4 = 0 And Zahl3 <> 0 Then
Zahl4 = A
End If
If Zahl3 = 0 And Zahl2 <> 0 Then
Zahl3 = A
End If
If Zahl2 = 0 And Zahl1 <> 0 Then
Zahl2 = A
End If
If Zahl1 = 0 Then
Zahl1 = A
End If
If Zahl4 <> 0 Then
Gosub Kontrolle
End If
A = 0 'Var a für nächste Wahl zurücksetzen
Return
'konrollieren ob die gewählte Nummer richtig ist
Kontrolle:
Bereit = 0
If Zahl1 <> 3 Then 'Vergleiche erste gewählte Ziffer mit vorgegebener Ziffer
Falsch = 0 'wenn falsch dann Rufzeichen "kein Anschluss unter dieser Nummer"
End 'und Programm beenden
End If 'wenn richtig weiter
If Zahl2 <> 3 Then
Falsch = 0
End
End If
If Zahl3 <> 4 Then
Falsch = 0
End
End If
If Zahl4 <> 9 Then
Falsch = 0
End
End If
Ansage = 0 'wenn alle Ziffern stimmen, Ansage der Informationen
End
Ich danke euch schon mal im voraus für eure Hilfe und wünsch erst mal einen "Guten Rutsch".