- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Tastenabfrage und Text auslesen am RN-Mega8 und LCD

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    08.11.2006
    Ort
    Wendeburg
    Alter
    36
    Beiträge
    96

    Tastenabfrage und Text auslesen am RN-Mega8 und LCD

    Anzeige

    E-Bike
    Hallo,

    Vorweg habe ich an euch eine allgeine Frage bezüglich des Demo-Programms vom RN-Control Mega8.
    Ich habe es so abgeändert, dass es bei Tastendruck auf taster 1-5 einen text auf das LCD ausgibt.

    Hier erstmal der Code:

    Declare Sub Taste1()
    Declare Sub Taste2()
    Declare Function Tastenabfrage() As Byte
    Declare Sub Taste3()
    Declare Sub Taste4()
    Declare Sub Taste5()
    Declare Sub Willkommen()

    $regfile = "m8def.dat"



    Dim Ws As Word
    Dim Adc_ohne_taste As Word


    $crystal = 16000000


    $baud = 9600


    Config Adc = Single , Prescaler = Auto , Reference = Off
    Config Pinc.0 = Input
    Portc.0 = 1
    Start Adc



    Dim Taste As Byte



    Config Pind.6 = Output
    Portd.6 = 0




    Dim ___lcdno As Bit
    Config Lcdpin = Pin , E = Portc.3 , Rs = Portc.2 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
    Config Lcd = 16 * 4





    Adc_ohne_taste = Getadc(0)





    Call Willkommen




    Do

    Taste = Tastenabfrage()


    If Taste <> 0 Then

    Select Case Taste
    Case 1
    Call Taste1
    Case 2
    Call Taste2

    Case 3
    Call Taste3
    Case 4
    Call Taste4
    Case 5
    Call Taste5



    End Select

    End If


    Loop

    End




    Function Tastenabfrage() As Byte
    Tastenabfrage = 0

    Ws = Getadc(0)
    If Ws < Adc_ohne_taste Then
    Select Case Ws
    Case 400 To 440
    Tastenabfrage = 1

    Case 330 To 370
    Tastenabfrage = 2

    Case 260 To 300
    Tastenabfrage = 3

    Case 180 To 230
    Tastenabfrage = 4

    Case 100 To 130
    Tastenabfrage = 5
    End Select

    End If

    End Function




    Sub Taste1()
    ___lcdno = 0
    Cls
    Locate 1 , 1
    Lcd "Taste1"

    End Sub


    Sub Taste2()
    ___lcdno = 0
    Initlcd
    Cursor Off
    Cls
    Home
    Lcd "Taste2"
    End Sub


    Sub Taste3()
    Initlcd
    Cursor Off
    Cls
    Lcd "Taste3"

    End Sub


    Sub Taste4()

    ___lcdno = 0
    Initlcd
    Cursor Off
    Cls
    Home
    Lcd "Taste4 "
    End Sub


    Sub Taste5()
    ___lcdno = 0
    Initlcd
    Cursor Off
    Cls
    Home
    Lcd "Taste5"
    End Sub

    Sub Willkommen()
    ___lcdno = 0
    Initlcd
    Cursor Off
    Cls
    Locate 1 , 1
    Lcd " Willkommen!"
    End Sub

    ---------------------------------

    Jetzt frage ich euch, wie kommt aus diesem code eine Tastenabfrage des Tasterport portc.0 zu stande?
    Was bedeuten die Zahlen in der "function" "case 400 to 440" usw.?
    ---------------------------------
    Mein Ziel ist es 9 taster anzuschließen mit denen ich Zahlen von 1-9 aufs LCD bringen kann. Der Lautsprecher soll dann die eingegebene Zahl in "Beep's" wiedergeben (oder ein Blinken von einer LED).

    -----------------------------------

    Wenn mir jemand weiterhelfen könnte, wäre ich sehr dankbar.

    Vielen Dank


    Timo

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467

    Re: Tastenabfrage und Text auslesen am RN-Mega8 und LCD

    Zitat Zitat von timo1105
    Jetzt frage ich euch, wie kommt aus diesem code eine Tastenabfrage des Tasterport portc.0 zu stande?
    Was bedeuten die Zahlen in der "function" "case 400 to 440" usw.?
    400 to 440 sind die Werte, die der ATMega am ADC misst. Jeder Taster hat einen anderen Widerstand, also kommt am ADC bei einem höheren Widerstand ein kleinerer Wert raus, bei einem niedreigen Widerstand ein größerer.


    Zitat Zitat von timo1105
    Mein Ziel ist es 9 taster anzuschließen mit denen ich Zahlen von 1-9 aufs LCD bringen kann. Der Lautsprecher soll dann die eingegebene Zahl in "Beep's" wiedergeben (oder ein Blinken von einer LED).
    Dann must du weiter 4(?) Taster über vier, sich deutlich von den anderen Widerstanden unterscheidenden, Widerstände anbringen und im Programm die einzelnen ADC-Werte austesten.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    08.11.2006
    Ort
    Wendeburg
    Alter
    36
    Beiträge
    96
    hi jon,

    bist ja recht aktiv hier, danke für deine antworten!

    Sind 400 to 440 beliebige werte und sind das werte um den Widerstand rum? sind dann dann blödgefragt 440ohm oder kiloohm?

    Müssen sie schalter einmal an masse und an den anderen pin ein widerstand der dann an den port geht?

    was ist die adc?

    Mfg
    Timo

    p.s mit was hast du das alles gelernt?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Zu analog und digital schau dir mal das und das an.
    Der ADC wandelt das analoge Signal nur in ein digitales um.

    Und dann schau dir mal das an. Auf Seite 26 findest du den Schaltplan zum RN-MEGA8plus. Wie du vielleicht merkst, ist der erste Taster über einen 10kOhm Widerstand an +5Volt gelegt. der zweite ist über insgesammt 11kOhm an +5Volt gelegt usw.
    Jetzt kannst du probieren weitere Taster über 1kOhm anzuschließen, aber eventuell musst du auch den 10kOhm Widerstand austauschen gegen einen 6KOhm und AREF auf AVCC stellen (mehr dazu in der Bascom Hilfe).

    Ich hoffe, du verstehst, was ich da geschrieben habe

    jon

    P.S.: Wenn du wieder einen Code hier reinstellst, dann schreibe doch bitte an den Anfang des Codes "
    Code:
    " und an das Ende "
    "
    Sieht dann so aus:
    Code:
    Hallo!!
    Nice to be back after two years
    www.roboterfreak.de

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    08.11.2006
    Ort
    Wendeburg
    Alter
    36
    Beiträge
    96
    Sehr gut, dann habe ich mal etwas zu lesen. Ich danke dir erstmal!

    Jetzt checke ich erst was ADC sollte. habe den wald vor lauter bäumen nicht gesehen.
    muss jetzt erstmal ne pause machen morgen gehts weiter.

    Dankeschön!

    bis dann

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Also das oben ist etwas missglückt (das mit dem Code) aber wenn du auf Zitat klickst, dann siehst du, was ich geschreiben habe.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    08.11.2006
    Ort
    Wendeburg
    Alter
    36
    Beiträge
    96
    argh--- ich hätte mir mal den zweiten Teil des Schaltplans anschauen sollen. Den hab ich die ganze Zeit unterschlagen

    mit dem Zitat habe ich verstanden.

    Timo

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    08.11.2006
    Ort
    Wendeburg
    Alter
    36
    Beiträge
    96
    Hi!

    Ich habe dazu nochmal eine Frage:

    Wie kommen die verschiedenen Werte zu Stande z.B 400 to 440?
    woher weis ich was ich beim nächsten Taster nehmen muss?
    warum sind bei den ersten drei Werten die Spannen dazwischen 40 und bei den anderen zwei 50?

    Was ist in unserem Fall das analoge Signal und welches das digitale?

    Wie ist denn in dem obigen Programm die grundsätzliche Reihenfolge?
    Was ich verstehe ist, dass man einen Pin als Input definieren muss. In dem Fall Pinc.0 (Tasterport an dem alle Taster "hängen")

    Dann steht da etwas von "Prescaler" as single usw. was ist damit gemeint?

    wie erkennt er jetzt genau das eine Taste gedrückt wurde?
    Vergleicht er die Werte die ganze Zeit oder nur wenn eine Taste gedrückt wurde?
    Kannst du Jon oder jemand anders, dass in kurzen Worten erklären? Oder vielleicht einen Link schicken?

    Das Prinzip des ADC habe ich ja verstanden. Nur was das in diesem Fall bedeutet kann ich mir schlecht vorstellen.

    Tut mir leid wenn ich damit nerve, nur weis ich nicht wo so etwas zu lesen ist.
    Vielleicht seit ihr ja so nett und erklärt mir das

    Danke schonmal im vorraus. Schönen Abend noch.

    Timo

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Zitat Zitat von timo1105
    Wie kommen die verschiedenen Werte zu Stande z.B 400 to 440?
    Diese Werte kommten bem Vergleich deiner Referenzspannung zustande. Eine 1 entspricht dabei 0,0048828125Volt.
    Wenn du also als Wert 420 hast sind das ca.2Volt, die am Pin anliegen.

    Zitat Zitat von timo1105
    woher weis ich was ich beim nächsten Taster nehmen muss?
    Experimentieren...

    Zitat Zitat von timo1105
    warum sind bei den ersten drei Werten die Spannen dazwischen 40 und bei den anderen zwei 50?
    Kam eben bei Experimenen heraus

    Zitat Zitat von timo1105
    Was ist in unserem Fall das analoge Signal und welches das digitale?
    Die Spannung, die du am Pin nach GND messen kannst ist das analoge Signal. Erst im ATMEGA wird das Signal in ein digitales umgewandelt.

    Zitat Zitat von timo1105
    Wie ist denn in dem obigen Programm die grundsätzliche Reihenfolge?
    Was ich verstehe ist, dass man einen Pin als Input definieren muss. In dem Fall Pinc.0 (Tasterport an dem alle Taster "hängen")
    Die Reihenfolge ist immer, dass du erstmal definierst, welchen µC du hast.
    Danach legst du die Quarzfrequenz fest, mit der du arbeites.
    Dann die Baud-Rate.
    Die Ports, die du verwendest, auch die Initialisierung des LCDs und des ADC.
    Dann die Variablen.
    Und nun dein Programm.
    Die Reihenfolge kann sich auch je nach Programmierer ändern, ich habe mich aber an diese Reihnenfolge gewöhnt.

    Zitat Zitat von timo1105
    Dann steht da etwas von "Prescaler" as single usw. was ist damit gemeint?
    Das kann ich nocht so wirklich erklären. Wäre schön, wenn das jemand anderes macht.

    Zitat Zitat von timo1105
    wie erkennt er jetzt genau das eine Taste gedrückt wurde?
    Vergleicht er die Werte die ganze Zeit oder nur wenn eine Taste gedrückt wurde?
    Er vergleicht die Spannung, die am Pin anliegt mit deiner Referenzspannung (5Volt)

    Zitat Zitat von timo1105
    Tut mir leid wenn ich damit nerve, nur weis ich nicht wo so etwas zu lesen ist.
    Vielleicht seit ihr ja so nett und erklärt mir das
    Warum nerven. Ich denke mir dabei das:
    Anfangs habe ich mit solchen Fragen "genervt". Jetzt kenne ich das alles und kann Fragen beantworten. So wird es bei dir hoffentlich auch mal sein. Und nur duch Fragen kann man lernen...

    jon
    Nice to be back after two years
    www.roboterfreak.de

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    08.11.2006
    Ort
    Wendeburg
    Alter
    36
    Beiträge
    96
    Hallo!

    Danke für deine Antwort!

    Werde mich jetzt damit mal mehr beschäftigen.
    Zum Prescaler habe ich gefunden, dass er den Timer mit einem taktsignal versorgt, welches vom internen Takt abgeleitet wird.

    In meinem Fall wurde der Prescaler = Auto gesetzt. Das ist eine Unterstützung von Bascom. Das Programm "sucht" sich die passende Frequenz für den ADC in Abhängigkeit von der angegebenen MHZ-Zahl.

    Diese Werte kommten bem Vergleich deiner Referenzspannung zustande. Eine 1 entspricht dabei 0,0048828125Volt.
    Wenn du also als Wert 420 hast sind das ca.2Volt, die am Pin anliegen.
    Muss ich also vorher wissen wie viel Volt am Pin anliegen und dann erst die Zahl bestimmen?
    woher weist du das 1 0,0048V sind?



    Werde jetzt ein bissl weiterexperimentieren

    Danke!

    Timo

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests