• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Telefon mit 4x4 Matrix

Bussard

Geocacher
Hast Du die beiden wichtigsten Grundeinstellungen des Programms an Deinen (neuen?) Controler angepaßt?
Taktfrequenz bei Heldt ist 16MHz über externen Quarz und ATMEGA8, beim neuen ATMEGA sind immer 1MHz und intern erzeugter Takt ohne Quarz voreingestellt (was für das Codeschloßprogramm vollkommen ausreicht). Der Typ und die Taktfrequenz muß dem BASCOM-Compiler über das REGfile mitgeteilt werden, damit er die universellen Basic-Befehle in genau zum Prozessor passenden Maschinencode compiliert. Da mußt Du keine fuses ändern!).
Also z.B. '
'##### Init ###################################################
$regfile = "m48def.dat"
$crystal = 1000000 'Werkseinstellung

Weiter paßt die Belegung des Tastaturports schon Port D, im vorigen Beispiel wird aber der Port C vom Display belegt, der bei Heldt als Ausgang für die beiden LEDs, Relais und Summer verwendet wird. Also ohne Display verwenden oder das Display an Port B anschließen. Da dort die Pins nicht ganz reichen, kannst Du R/W=Rs auch fest auf Masse/ 0V legen. Aber auch ihne Display sollte das Programm es dann "tun".
Beim Compilieren dürfen keine Fehler auftauchen, erst dann den ersten Versuch des Brennens machen!

Gruß Bussard
 

hihatzz

Geomaster
Wo habt ihr eigentlich das/die Display/s her die man am Steckbrett verwenden kann?
Oder habt ihr da erst vorher Drähte/(Flachband-)Kabel angelötet?
 
OP
H

Haenigser

Geocacher
@hihatzz:
Bei Reichelt und dann gelötet...

@Bussard:
Die Grundeinstellungen passen.
Mit dem Display wollte ich in erster Linie testen, ob die Tastatur in Ordnung ist - und das ist sie. :)
Daraufhin habe ich den Schaltplan auf mein Brett gesteckt. Allerdings ohne der Relais.
Es müsste doch aber auch ohne funktionieren, oder?
Im Grunde ist das Zahlenschloss auch viel mehr als ich brauche. Mir reicht es eigentlich, wenn bei der richtigen Telefonnummer ein Soundmodul gestartet wird. Bzw. wenn ich bei Upigors shoppen war (Soundmodul microSD), eine Ansage bei korrekter Nr. und eine Ansage "kein Anschluss unter dieser Nr." zu hören ist.
 

peter51d

Geocacher
Genau das habe ich hier liegen. Einmal mit einem Tastentelefon und Mega 8 und einmal mit einem Wählscheibentelefon mit einem Tiny13 für die Auswertung.
Müsste, bei Bedarf mal den Code raussuchen.
 

peter51d

Geocacher
Leider sind die Codes nicht oder nur leidlich Kommentiert.
Sollte aber verständlich sein, da nicht sehr umfangreich.

Tastentelefon:

Code:
$regfile = "m8def.dat"
$crystal = 1000000

Config Kbd = Portb , Debounce = 20 , Delay = 50             'Matrixtastatur 3x4 an PortB angeschlossen

Config Portd.0 = Output
Ddrd = &B11111111
Freizeichen Alias Portd.0                                   'Freizeichen
Verwaehlt Alias Portd.1                                     'Verwählt
Ansage Alias Portd.7                                        'Textansage



Dim Eingabe As String * 20
Dim Code As String * 20


'***Hier Initial-Code eingeben ***

Code = "0123456789"




Dim Tastencode As Byte




Eingabe = ""

Freizeichen = 0
Verwaehlt = 1
Ansage = 1

Do


Tastencode = Getkbd()

If Tastencode <> 16 Then
  Select Case Tastencode

   Case 0 : Eingabe = Eingabe + "1"                         'Eingabenstring zusammensetzen
   Case 1 : Eingabe = Eingabe + "2"
   Case 2 : Eingabe = Eingabe + "3"
   Case 4 : Eingabe = Eingabe + "4"
   Case 5 : Eingabe = Eingabe + "5"
   Case 6 : Eingabe = Eingabe + "6"
   Case 8 : Eingabe = Eingabe + "7"
   Case 9 : Eingabe = Eingabe + "8"
   Case 10 : Eingabe = Eingabe + "9"
   Case 12 : Eingabe = Eingabe + "*"
   Case 13 : Eingabe = Eingabe + "0"
   Case 14 : Eingabe = Eingabe + "#"

  End Select





  If Len(eingabe) = Len(code) Then Gosub Auswerten
 Do
   Tastencode = Getkbd()

  Loop Until Tastencode = 16

End If
Loop
End

Auswerten:


   If Eingabe = Code Then
                                                            'code korrekt

    Freizeichen = 1                                         'Freizeichen aus
    Ansage = 0                                              'Textansage auslösen
    Wait 3
    Ansage = 1

    Else


    Freizeichen = 1
    Verwaehlt = 0                                           'Verwählt Zeichen
    Wait 3
    Verwaehlt = 1


    End If





Eingabe = ""
End

Wälscheibentelefon:

$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 2
$swstack = 5


'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 Nummer As String * 10 'Der String in dem die gewählte Nummer geschrieben wird
' !!genau so gross wie der String "Rufnummer"!!
Dim Rufnummer As String * 10 'Der String in dem die zu wählende Nummer festgelegt wird
'die max länge ist hier auf 10 Nummern beschränkt


'Alle Variablen auf Null setzen
A = 0
Nummer = "" 'Sicherstellen, das String leer

'Alle Ausgänge auf 1 setzen
Falsch = 1
Ansage = 1
Bereit = 1


'Hauptprogrammschleife

Rufnummer = "7634528109" 'Hier die zu wählende Nummer eintragen

'Abfrage des Nummernschalters
Do
Bereit = 0 '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

Auswerten:
If A = 0 Then 'Verhindern, das beim Start schon etwas in den Sting "Nummer"geschrieben wird
Return
End If
If A = 10 Then 'beim wählen der Nummer 0 werden 10 Impulse erzeugt.
A = 0 'hier durch wird im String eine "0" geschrieben
End If
Nummer = Nummer + Str(a) 'Die ermittelten Impulse der Rufnummer hinzufügen
If Len(nummer) = Len(rufnummer) Then 'Länge der gewählten Nummer mit Länge der zu wählenden Nummer vergleichen
'durch den Längenvergleich der Strings, muss keine extra längen Angabe mehr gemacht werden
Goto Kontrolle 'wenn Länge gleich dann zur Kontrolle
End If
A = 0 'Impulse für nächste Nummer löschen
Return


Kontrolle:
Bereit = 1
If Nummer = Rufnummer Then 'zu wählende Nummer mit gewählter Nummer vergleichen
Ansage = 0 'wenn gleich dann Ansage
Else
Falsch = 0 'wenn ungleich dann "kein Anschluss unter dieser Nummer"
End If

End 'end program

Ich hoffe, geholfen zu haben.
 

Bussard

Geocacher
hihatzz schrieb:
Wo habt ihr eigentlich das/die Display/s her die man am Steckbrett verwenden kann?
Oder habt ihr da erst vorher Drähte/(Flachband-)Kabel angelötet?
Entweder von Pollin oder so ein Teil (versch. Anbieter) http://www.ebay.de/itm/HD44780-1602-LCD-Module-Display-Anzeigen-2X16-Zeichen-/130843540637?_trksid=p2047675.m1986&_trkparms=aid%3D555001%26algo%3DPW.CURRENT%26ao%3D1%26asc%3D29%26meid%3D5848421186404390122%26pid%3D100013%26prg%3D1013%26rk%3D1%26sd%3D180872317608%26
Flachbandkabel mit (bei mir Buchsenstecker) angelötet, Mini bzw- SMD-Kontrast-Poti gleich auf die Anschlüsse gelötet, nicht schön, aber für Versuchsaufbauten zweckmäßig.
Gruß Bussard
 
OP
H

Haenigser

Geocacher
@Peter: Vielen Dank für die Codes!

@all: Kann ich ohne externen Quarz den komplette PortB für meine 4x4 Tastatur nutzen?
 

upigors

Geowizard
oha, Peter hat wieder gepostet :D
Werde morgen dein Tastenproggi mal testen, das Anfangs gepostete bzw. verlinkte hab ich zwar dann hin bekommen aber irgendwie funktioniert die Geschichte mit dem Rückstellcode nicht.
Na ja, wenig Zeit im moment, auf jeden Fall schön das es hier immer wieder leute gibt die sich gedanken machen.....
 

peter51d

Geocacher
Danke für die Blumen.
Aber der Code für das Tastentel ist nicht selbst entwickelt.
Ist aus einem Codeschlosscode eingedampft auf das was ich für das Tel brauchte.
Rückstellcode, sperren nach "x"mal falscher Code, verstellung des Codes über Mastercode und solche Sachen, brauchte ich bei dem Tel nicht und sind deshalb rausgeflogen.
 
OP
H

Haenigser

Geocacher
Sooo...

Ich sach mal - läuft. :) :)

Allerdings musste ich die Cases etwas ändern. Wahrscheinlich nicht die feine englische Art, aber es tut, was es soll. :p

Code:
If Tastencode <> 16 Then
  Select Case Tastencode

  Case 0 : Eingabe = Eingabe + "1"                         'Eingabenstring zusammensetzen
  Case 1 : Eingabe = Eingabe + "4"
  Case 2 : Eingabe = Eingabe + "7"
  Case 3 : Eingabe = Eingabe + "*"
  Case 4 : Eingabe = Eingabe + "2"
  Case 5 : Eingabe = Eingabe + "5"
  Case 6 : Eingabe = Eingabe + "8"
  Case 7 : Eingabe = Eingabe + "0"
  Case 8 : Eingabe = Eingabe + "3
  Case 9 : Eingabe = Eingabe + "6"
  Case 10 : Eingabe = Eingabe + "9"
  Case 11 : Eingabe = Eingabe + "#"
  Case 12 : Eingabe = Eingabe + "A"
  Case 13 : Eingabe = Eingabe + "B"
  Case 14 : Eingabe = Eingabe + "C"
  Case 15 : Eingabe = Eingabe + "D"
 
  End Select
 

peter51d

Geocacher
Das mit der "Case" Konfiguration, kommt auf die Matrix an.
Ich hatte nur eine 3x4 Matrix.
Vielleicht ist die Portbelegung bei einer 4x4 Matrix anders.
Aber du wusstest dir ja zu helfen.

Viel Spass noch damit.
 

nocava

Geocacher
Ich hab bei meinem Smartphone-Cache GC3n3vg die 4x4 Matrix rausgenommen, ne Lochrasterplatine mit Tastern genommen und hatte keine Probleme mit den Chips
 
OP
H

Haenigser

Geocacher
Es geht weiter...

Moin Telefon läuft immer noch wie am ersten Tag. Allerdings hätte ich es gern etwas "wetterfester". Deswegen habe ich mir in der Bucht einen Ackerschnacker besorgt, welchen ich nun mit der Elektronik bestücken möchte.

Meine Frage ist nun: Ist es einfacher den Fernsprecher dafür zu schlachten oder komme ich mit dem vorhandenen Platz im Inneren aus?

Schönen Gruß aus Hänigsen
 

peter51d

Geocacher
Das wird dir wohl keiner beantworten können, solange du uns nicht sagst was es für ein Gerät ist?
Das einfachste wird aber sein, das Teil aufzuschrauben wenn es da ist. Dann siehst du wie viel Platz du hast?
 
Oben