-         
+ Antworten
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: Quelltext Erklärung

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.09.2004
    Ort
    Mosbach, Baden
    Beiträge
    42

    Quelltext Erklärung

    Hallo zusammen!

    Das ist mein erster Beitrag und ich muß loswerden, dass das Forum hier echt spitze ist !

    Nach langem lesen der Threads hab ich mich entschlossen, dass RN-Control zu bestellen. Kaum bei mir angekommen, alles zusammengelötet, das Testprogrammen laufen gelassen und "AHHHH, es funktioniert alles"..

    Nachdem ich nun die ersten LED's zum leuchten gebracht habe, der erste Motortest lief, will ich natürlich selbst mal nen Quelltext zusammenfrimmeln !

    Das hab ich auch gemacht - Ziel war es, mit der Taste 1 auf dem RN Control Board eine LED zum leuchten zu bringen, mit der Taste 2 es wieder ausschalten, mit Taste 3 alle zum leuchten zu bringen und mit Taste 4 alle wieder ausschalten - was soll ich sagen, ich habs hinbekommen und es klappt!

    Nur versteh ich meinen eigenen Quelltext nicht

    Hier mal der Quelltext:

    Code:
    $crystal = 16000000
    $baud = 9600
    
    Config Adc = Single , Prescaler = Auto                      'Für Tastenabfrage und Spannungsmessung
    
    Config Pina.7 = Input                                       'Für Tastenabfrage
    Porta.7 = 1                                                 'Pullup Widerstand ein
    
    Config Portc = Output
    Dim Ws As Word
    
    Do
    
    
       Start Adc
       Ws = Getadc(7)
       If Ws < 1010 Then
    
          Select Case Ws
    
             Case 410 To 450                                    'Taste 1: erste LED wir angeschalten
                   Ddrc = &B00000001
             Case 340 To 380                                    'Taste 2: erste LED wird ausgeschalten
                   Ddrc = &B00000000
             Case 265 To 305                                    'Taste 3: Alle LED's werden angeschalten
                   Ddrc = &B11111111
             Case 180 To 220                                    'Taste 4: Alle LED's werden ausgeschalten
                   Ddrc = &B00000000
    
          End Select
    
       End If
    
      Waitms 100
    
      Loop
    
      End
    Jetzt zu meinen Fragen (hab schon im Forum und im Internet gesucht, doch leider nichts brauchbares gefunden):

    - Kann mir jemand erklären, was genau die begriffe PORTX, PINX und DDRX bedeuten bzw wie sie zusammen eine Rolle spielen?

    - Bei der Tastenabfrage die Zahlen bis 1010 eine Rolle spielen (Taste eins wir mit dem Befehl "Case 410 To 450" abgefragt -> was bedeutet 410 bis 450??

    - Was der Begriff config ADC = ... , Start ADC und getadc(x) bedeuten

    - Warum die Variable Ws als Word deklariert wird, und nicht zum beispiel as Integer.

    - Ob es ne Seite im Internet gibt, die sich mit dem Einstieg in Bascom beschäftig (quasi ein online Einsteigerbuch für Bascom)

    Ok, soweit sind das mal meine ersten Fragen dazu. Ich weiß, ich könnt mir ja ein Buch kaufen, aber die Fragen interessieren mich gerade ziemlich !

    Ich bedank mich schonmal für evtl Antworten !

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Also alle Fragen kan ich dir auch nciht beantworten, aber einige:
    POrtX ist der geamte Port, also 8 ein bzw. ausgänge. du akknst dann ein Byte darüber parallel ausgeben.
    PinX ist ein einziger Pin, deshalb auch die nummer dahinter.
    Bei der Tastatur sind mehrere Widerstände in Reihe geschaltet, je nach dem welche Taste du drükst, kommt halt ein verschieden 'hoher' Spannungswert raus. ADC ist der Analog Digital-Converter. er liefert dir in diesem Fall einen WErt zwischen 0 und 1023. Wenn der WErt größer 1010 ist, ist keine Taste gedrückt, man könnte vermutlich auch < 1023 schreiben, aber eine gewisse Toleranz ist besser, oder es fließt immer eine geringer Strom, das häng vom Aufbau der Tastur ab. Liefert der ADC einen Wert zwischen 410 und 450. ist halt die 1 gedrückt. diese werte sollte man am besten ausmessen, wenn man nciht genau weiß, wie man sie errechnet. WS wird als Word deklariert, weil der gespeichert Wert zu groß für einen Integer ist, Integer gehen von 0 bis 255. Da die Wert aber halt bis 1024 gehen, braucht man eine Variable mit mindestens 10 Bits. Der Integer hat nur 8 das Word 16.
    So ich hoffe, ich konnte dir ein wenig helfen, wenn du noch fragen hast frag nur. Das mit Start DC und get ADS ist glaub ich deshalb so, weild er ADC initialisert werden muss, und dazu ein wenig Zeit benötigt. So ungefähr müsste das sein. Warum es getadc(7), also 7 heißt, weilß ich nicht, schau mal in der hilfe nach. Ne vernünftige Anleitung im Internet hab ich nicht gefunden. Ich geh da eher nach Try and error vor, und schau mir halt an, wie es in anderen Codes ist, bzw. frage einfach im Forum nach.

    MFg moritz

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Ach so, vermutlich sind ADC nur an PortA möglich, von daher getADC(7)!
    Buchempfehlung schreibe ich noch, uss nur gerade mal schauen wies heißt.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    01.01.2004
    Beiträge
    96
    - PORTx, PINx und DDRx beschreiben den Zustand des Ports. Mit DDRx wird festgelegt, ob der Port als Ein- oder als Ausgang verwendet werden soll, mit PORTx wird der Port entweder auf Low oder High geschaltet bzw. wenn der Port als Eingang verwendet wird, wird damit der Interne PullUp Widerstand eingeschaltet. Mit PINx wird der Port abgefragt.

    - die Tasten hängen bei der RN-Control alle an einem analogen Eingang, bedingt durch Unterschiede bei der Vertigung und bedingt durch Schwankungen bei der Messung kann sich der Wert ändern, deshalb wird ein Bereich angegeben indem sich der Wert befinden muss.
    Bei der Messung wird die Spannung abgefragt, die am Eingang anliegt.
    Wert = Umess / Uref * 1024

    - Ws wird als Word definiert, weil es eine positive 16bit Zahl ist (10bit wenn man die Auflösung des analog Wandlers nimmt).

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    13.09.2004
    Ort
    Mosbach, Baden
    Beiträge
    42
    Ah, also alle Taster sind am Pina.7 angeschlossen und anhand der Spannung wird ausgemessen, welcher Taster gedrückt wird! Ok, ist einleuchtend, nur stellt ich mir (als waschechter Neuling) die Frage, warum die On-Board Taster nicht jeweils einen anderen Pin zugewiesen bekommen haben (z.B. Taster 1 -> PC0, Taster2-> PC1, Taster 3 -> PC2, usw...)! Wäre doch naheliegend, oder? Wird sicherlich seinen Grund haben, dass das nicht so ist, aber von diesem Grundgedanken bin ich ausgegangen und deshalb hat mich das mit der Spannungsmessung doch etwas verwirrt !
    Aber gut, jetzt weiß ich es ja!

    Danke für die echt schnellen Antworten, werd jetzt mal ein wenig rumbasteln und rumprogrammieren!

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Also der Grund dafür, dass man nicht jedem Taster einen eigenen Wert zuweist, ist einfach der, das man da halt teilweise enorm viele Ports spraen kann. ICh weiß nciht, wie viele Taster auf deinem Bord da dran hängen, aber wenn du mal überlegst, das ein einfaches Tastenfeld mit * und # 12 Tasten hat, kannst du dir sicher vorstellen, warum man es so macht.

    MFg Moritz

  7. #7
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    So ist es. Wenn man die Taster an einen analogen Port hängt wird halt nur ein Port belegt. Die anderen Ports kann man noch fein für andere Dingen nutzen, freie Ports kann man nie genug haben.
    Ist also wirklich nur um Ports zu sparen, ansonsten hätte man natürlich pro Port einen Taster machen können.
    Im übrigen könnte man an den gleichen analogen Port auch noch weitere taster anhängen wenn man geschickt die Widerstände wählt. Man muß dann nur die Abfrage anpassen.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    24.02.2004
    Ort
    Starnberg
    Alter
    39
    Beiträge
    170
    Hallo,

    ich behaupte jetzt nicht von mir, ein Bascom-Spezialist zu sein, aber warum werden die Ports mit 'DdrC' an und ausgeschalten?
    Sollte das nicht eher PortC heißen ???

    Kann ja durch Zufall sein, daß es funktioniert, aber ist das richtig?

    Ddrc = &B00000001
    Grüsse, Martin

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Also so weit ich weiß, kann man beides schreiben, mit:
    PortC deklariert man den ganzen port als ein oder Ausgang
    mit:
    DDRC = &B00000001 deklariert man die ersten 7 (oder letzten 7?) als Eingang (oder Ausgang?), und den letzten umgekehrt.
    Wenn du viele Ports gemsicht hast, also z.B:
    Port C1, C3 und C4 als Asugang, und die anderen von C als Eingang, dann ist die DDRC Methode sinnvoller, aber es wird ja nunmal der Ganze Port zum Ausgang gemacht.

    MFg Moritz

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    13.09.2004
    Ort
    Mosbach, Baden
    Beiträge
    42
    Genau so habe ich es als Anfänger auch verstanden!

    Port X = input/output bennent den ganzen Port zum Ein- bzw Ausgang...

    DdrX benennt nur die einzelnen Pins!

    Im Endeeffekt sind beide Befehle gleich, wenn man den kompletten Port zum Ein- bzw Ausgang machen will!(also es ist egal ob man PortC = output oder Ddrc = &B11111111 schreibt)

    Ist dann wohl Geschmacksache, wie mans macht (es sei den, man will wirklich nur einen Pin ansprechen), wobei ich die DdrX methode irgendwie übersichtlicher finde... jede Ziffer im code steht für einen Pin, den man nach belieben konfigurieren kann!

    Hoffe ich erzähl hier keinen Müll !

+ Antworten
Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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