-         

Ergebnis 1 bis 5 von 5

Thema: RN-Control Tastenabfrage in asm

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    10.09.2006
    Beiträge
    5

    RN-Control Tastenabfrage in asm

    Anzeige

    Hallo,

    Ich kann mir vorstellen, dass regelmäßig gefragt wird, wie die RN-Control Tasten abgefragt werden, leider hab ich wenig gefunden und aufgegeben zu suchen und zu probieren, obwohl ich doch schon etwas geschafft hab.

    Code:
    .include"m32def.inc"
    
    .org 00
    rjmp reset
    
    reset:
    ldi r16, 0b11000111 
    
    start:
          
    	   sbi porta,7			;Pullupwiederstand, wie im Bsp. Program von der CD
    	   cbi ddra,7			;PortA als Eingang
    	   out adcsra, r16		;ADC starten
    
    test:
    	   sbic adcsra,6		;warten bis ADC fertig
    	   rjmp test
    
    	   in r17,adcl			;ADC Ergebnis speichern
    	   in r18,adch
    
    	   rjmp start
    Ich hab das was ich bis jetzt hab aus dem Datenblatt des RN-Controll, des Atmel M32 Datenblattes und einiger Forenbeiträge zusammengesammelt. Es ist nicht viel, aber hier verstehe ich ein paar sachen nicht.

    Im Basic Bsp. Programm für das RN-Control wird der PortA.7 Auf High gesetzt, ich versteh nicht warum, schließlich ist der Port ja auf Eingang geschalten, und es liegt eh keine Spannung an.

    Die Sache mit den Prescaler Selectbits hab ich auch nicht verstanden, was machen die und wie funktionieren die?

    Und zum Schluss weiß ich nicht wie ich mit den Ergebnissen des AD-Wandlers weitermache um z.B. die LED's des Boards anzuschalten, wobei das anschalten nicht das Problem ist.

    Ich hoffe die 3 Punkte sind schon die einzigen übrigen Probleme zur Tastenabfrage. Gibt es eigentlich kein Tutorial für das RN-Control und ASM?

    Naja, ich hoffe ich gehe euch nicht mit einem Problem auf die Nerfen das schon 1000 ihr schon 1000 mal einen Anfänger erklärt habt und bedanke mich im Vorraus.

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569

    Re: RN-Control Tastenabfrage in asm

    Zitat Zitat von xdr4g0n
    Hallo,

    Ich kann mir vorstellen, dass regelmäßig gefragt wird, wie die RN-Control Tasten abgefragt werden, leider hab ich wenig gefunden und aufgegeben zu suchen und zu probieren, obwohl ich doch schon etwas geschafft hab.

    Code:
    .include"m32def.inc"
    
    .org 00
    rjmp reset
    
    reset:
    ldi r16, 0b11000111 
    
    start:
          
    	   sbi porta,7			;Pullupwiederstand, wie im Bsp. Program von der CD
    	   cbi ddra,7			;PortA als Eingang
    	   out adcsra, r16		;ADC starten
    
    test:
    	   sbic adcsra,6		;warten bis ADC fertig
    	   rjmp test
    
    	   in r17,adcl			;ADC Ergebnis speichern
    	   in r18,adch
    
    	   rjmp start
    Ich hab das was ich bis jetzt hab aus dem Datenblatt des RN-Controll, des Atmel M32 Datenblattes und einiger Forenbeiträge zusammengesammelt. Es ist nicht viel, aber hier verstehe ich ein paar sachen nicht.

    Im Basic Bsp. Programm für das RN-Control wird der PortA.7 Auf High gesetzt, ich versteh nicht warum, schließlich ist der Port ja auf Eingang geschalten, und es liegt eh keine Spannung an.

    Die Sache mit den Prescaler Selectbits hab ich auch nicht verstanden, was machen die und wie funktionieren die?

    Und zum Schluss weiß ich nicht wie ich mit den Ergebnissen des AD-Wandlers weitermache um z.B. die LED's des Boards anzuschalten, wobei das anschalten nicht das Problem ist.

    Ich hoffe die 3 Punkte sind schon die einzigen übrigen Probleme zur Tastenabfrage. Gibt es eigentlich kein Tutorial für das RN-Control und ASM?
    Nimm doch bitte das Datenblatt zur Hand. Dort steht unter anderem das folgende drin:

    Das Port Register wird zum aktivieren / deaktivieren der internen Pullups genutzt, wenn der entsprechende Pin als Eingang konfiguriert ist.

    Dann kann ich dir das Tutorial auf www.mikrocontroller.net ans Herz legen. Dort in der Codesammlung findest du auch so einige recht brauchbare Codeschnipsel.

    So, das erst mal von mir dazu.
    Grundregeln des Forenpostings:
    1. Nutze niemals die Suchfunktion!
    2. Überprüfe niemals die Topics nach Ähnlichkeiten!
    3. Schreibe alles in hellgelb!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    09.09.2006
    Ort
    Bayer/Unterfranken
    Beiträge
    31
    hallo zusammen!

    bitte nicht böse sein aber alleine schaff ichs nicht!
    also da ich mich jetzt entschieden habe den AVR (rn-control) in assembler zu programmieren und damit besser verstehen zu können, bräuchte ich etwas starthilfe.

    ich möchte auch erst mal die tasten vom RN-Control abfragen und dann eventl. für die taste1 die led1, taste2 die led2 usw leuchten lassen.

    leider weiß ich nicht wirklich wie ich das anstellen soll.
    habe zuerst einmal ein- und ausgänge definiert und den ADC eingestellt. jetzt weiß ich nicht wie man weiter vorgeht.
    hier mal mein programm:
    Code:
    .NOLIST                    ; List-Output unterdrücken
     .INCLUDE <m32def.inc>       ; das gibt es für jeden Controllertyp
     .LIST                      ; List-Output wieder aufdrehen
     .CSEG                      ; was nun folgt, gehört in den FLASH-Speicher
    
     .def w = r16
     ;------------------------------------------------------
     ;     Start Adresse 0000
     ;------------------------------------------------------
     RESET:
         jmp INIT           ; springen nach "INIT"
    
     ;------------------------------------------------------
     ;     ISR VECTORS
     ;------------------------------------------------------
     ;    .....    hier kommen dann die Sprungadressen für die Interrupts rein
     ;             dazu kommen wir noch
    
    
     .ORG INT_VECTORS_SIZE    ; dadurch haben wir für die Vektoren Platz gelassen
     INIT:  
     ;------------------------------------------------------
     ;     INITIALIZE
     ;------------------------------------------------------
         ldi r24,high(RAMEND)     ;Stack Pointer setzen 
         out SPH,r24              ; "RAMEND" ist in m32def.inc festgelegt
         ldi r24,low(RAMEND)      ; 
         out SPL,r24              ;
    
     ;------------------------------------------------------
     ;   eigene Initialisierungen
     ;------------------------------------------------------
     	ldi w, 0x00
    	out DDRA, w			  	  ; PortA als Eingang
    	sbi PORTA,7				  ; Pullup an Pin7 von PortA an
    	ldi w, 0xff			  
    	out DDRC, w			  	  ; PortC als Ausgang
    	ldi r17, 0b11000111		  ; Einstellungen und Start für ADC	
    	out ADCSRA, r17			  ; ADC einstellen
    	ldi r17, 0b01100000		  ; Referenzspannung Vcc einstellen
     ;....
     ;....
    
     ;------------------------------------------------------
     ;   HAUPTSCHLEIFE
     ;------------------------------------------------------
     start: 
     test:	
    	sbic ADCSRA,6      ;warten bis ADC fertig 
     	rjmp test        ; immer wiederholen 
    
           in r18,adcl         ;ADC Ergebnis speichern
           in r19,adch
    
          rjmp start 
     ;------------------------------------------------------
     ;   ENDE
     ;------------------------------------------------------
     Ende:  
            rjmp Ende
    wäre toll wenn mir jemand unter die arme greifen könnte!
    oder gibts für die tastenabfrage irgendwo sowas wie eine musterlösung an die ich mir orientieren könnte?

    viele grüße
    manu

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.07.2006
    Ort
    Mannheim
    Beiträge
    454
    Vergiss erst mal den ADC, den brauchst du für ein paar Tasten nicht. Port A Pin 7 hast du als Eingang mit Pull Up definiert. OK, dann kommt an diesen Pin ein Taster nach GND.
    Port C hast du als Ausgang definiert. Häng mal von +5V einen Widerstand von ca. 220 Ohm an die Anode einer LED und die Kathode an Port C7.
    Dann schreibst du eine Schleife etwa so:
    LOOP: IN R20, PINA
    OUT PORTC, R20
    RJMP LOOP

    Du liest die Inputs von Pina nach r20 und gibst sie an Portc aus. Die Werte sind immer 1, also tut sich nichts. Drückst du jetzt aber die Taste am Pina7, dann wird dieser Pin auf GND (0) gezogen und diese 0 auf dem Portc7 ausgegeben und die LED leuchtet.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Ein Tip:

    ldi r17, 0b11000111 ; Einstellungen und Start für ADC
    out ADCSRA, r17 ; ADC einstellen
    ldi r17, 0b01100000 ; Referenzspannung Vcc einstellen
    Lass es sein mit den Bitmasken, so kann es kein Mensch lesen und ich persönlich weigere mich extra im Dattenblatt nachzuschauen, was Du da einstellst.
    Man muß im Assembler nicht so kompliziert denken !

    Einfacher ist es z.B.
    ldi tmp,(1<<PD0)|(1<<PD1)|(1<<PD2)
    out PORTD,tmp
    Am sonsten kannst Du Dir Deine ADC Werte über UART ausgeben lassen,
    damit weißt Du schonmal welcher Wert in etwa für welche Taste zuständig ist.

    Schau mal
    hier


    Ich hab da sowas für den Asuro geschrieben, müßte sich ziemlich einfach für RN-Controll umschreiben lassen

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

Berechtigungen

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