- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Kann das so funktionieren? ( Lauflicht )

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.10.2008
    Alter
    33
    Beiträge
    110
    Anzeige

    Praxistest und DIY Projekte
    So wäre ich mal wieder,

    Kurzer Überblick:
    Ich hab jetzt alles so gemacht das ich beim Auslösen
    des Timer Interuptes +1 in einen Register dazurechne
    und diese mit einen anderen Register vergleiche.
    Wenn dies zutrifft dann springe ich zu den Unterprogramm
    wo ich das Bit einmal durch PortB schiebe und wieder
    in die Hauptschleife Springe.

    Das Vergleichregister soll mit einen Tastendruck den Wert +16 oder
    -16 'gutgeschrieben bekommen' Somit ist das Vergleichregister
    mit 17 Werten einzustellen und somit ist die Geschwindigkeit einzustellen.

    Jetzt zu meinen Problem:
    PD2 und PD3 sind aktiviert und die PullUps auch.
    Bei Tastendruck wird entweder -16 und +16
    gerechnet.Die Addition ist ein wenig umständlich gelöst
    Für die Subthraktion gibt es einen direkt befehl für das addieren
    hab ich nichts direktes gefunden.

    Oder gibt es noch was zu beachten?
    Und kann mal jemand über den Code gucken?
    Beim Assembilieren gab es zumal keine Fehler.... \/

    Edit:
    So jetzt habe ich den Code weiter überarbeitet und im Simulator
    von AVRStudio funktioniert dieser Super, sogar die Addition
    im Vergleichsregister wird aufaddiert und alles stimmt.
    Nur wenn ich das in Hardware aufbaue funktioniert
    das ganze Nicht.
    Aufgebaut ist das ganze auf einen MyAVRBoard+Breadboard.
    Die LED's laufen einfach durch aber ein Tastendruck hat keinerlei
    ausmaß auf deren Geschwindigkeit.

    Die Ports habe ich auch schon gewechselt,statt die Spannung vom LPT
    zu nehmen habe ich auch mal einen Akku + den 7806er genommen
    und da hat sich auch nichts geändert.
    Jetzt bin ich mal gespannt was ihr dazu sagt.

    Liebe Grüße
    Namenlos

    Code:
    .include	"m8def.inc"
    
    .def Arbeit     = r16		;Für die Initialisieung zuständig
    .def Licht  	= r17		;Werte für das Lauflicht
    .def Zaehler 	= r18		;Zähler für jeden Interrupt
    .def Vergleich  = r19		;Vergleichs Register für den Zähler [ "Referenz" ]
    
    .def Wert		= r20		;Wert für die Addition / Subthraktion
    							;Für den Vergleichswert
    
    .def Reset		= r21
    
    
    .org 0x0000					; Hauptprogramm
        rjmp    Hauptprogramm    
    .org OVF0addr               ;Timer 0 Interrupt Vector Addresse [8 Bit-Timer ]
    	rjmp Timer1
    
    
    
    
    Hauptprogramm:				;Initialisierung
    
    
    
    
    		 ldi Arbeit, LOW(RAMEND)       ; LOW-Byte der obersten RAM-Adresse
             out SPL, Arbeit
             ldi Arbeit, HIGH(RAMEND)      ; HIGH-Byte der obersten RAM-Adresse
             out SPH, Arbeit
     
    
    
    		ldi	Arbeit,0b11111111
    		out	DDRC, Arbeit		        ;Alle Pins am Port C durch Ausgabe 0b11111111 ins
    								        ;Richtungsregister DDRC als Ausgang konfigurieren
    
    		
    		ldi Arbeit,0b11111000
    		out	DDRB, Arbeit		        ;PB0 und PB1 und PB2 als Eingang Aktivieren
    
    
    		ldi	Arbeit,0b00000111	        ;PB0 und PB1 und PB2 bekommen Pullup Widerstände
    		out	DDRB, Arbeit
    
    		
    
    		ldi Arbeit,0b00000001	     	;Vorteiler 1024 an Timer 0
    		out TCCR0,Arbeit			    ;Setze Bits [CS02 und CS00]
    
    		ldi Arbeit,0b00000001	     	;Timer Interupt Aktivieren
         	out TIMSK,Arbeit		  	    ;Setze Bit	[T0IE0]
    							  
    		
    
    		ldi Licht,0b00000001	     	; =1
    		out PortC, Licht			    ;Erste LED an PortC an
    
    
    		ldi Wert,0b00010000			    ;Konstante für das Subtharieren/Addieren [ 16 ]
    
    	
    		ldi Vergleich,0b00100000	    ;Startwert für das Vergleichsregister 
    										; [ 32 ]
    
    		ldi Reset,0b00000000			;Lösche das Reset Register
    
    		sei								;Interrupt Aktivieren
    	
    Schleife:		;Hauptschleife
    
    		
    
    		rjmp Schleife
    
    
    Timer1:									;Aktion beim Timerinterupt
    
    	    sbic     PINB,0           	 	;Wenn Taster gedrückt PD2 = 0
            rcall Addiere
          
            sbic     PINB,1           		;Wenn Taster gedrückt PD3 = 0
            rcall Subthraiere
                              		    	
    
          	sbic     PINB,2           		;Wenn Taster gedrückt PD4 = 0
            rcall Wiederherstellen
    
    
    
    
    		inc		Zaehler					;Addiere 1 zum Zähler Register
            cp		Zaehler,Vergleich		;Wenn der Zähler <= ist als der Vergleich ist
    										;Springe zu 'Bitschieben'
    		
    		brge Bitschieben				;Ansonsten:
    										
    		reti							;Verlasse den Interrupt Handler
    
    		
    								
    Bitschieben:							;Aktion wenn der Vergleich größer war
    
    
    
    		ldi Zaehler,0b00000000			;Setze den Zähler Zurück
    		rol Licht						;Bits 'schieben'
    		out PortC, Licht				;Gebe 'Licht' an PortC aus
    	
    		inc Reset						;Erhöhe Inhalt von 'Reset' um +1
    		cpi Reset,7						;Wenn Reset= 7 Springe zu Zuruecksetzen
    
    		brge	Zuruecksetzen			;wenn nicht:
    								
    
    
    		reti							;Verlasse den Interrupt Handler
    
    Zuruecksetzen:
    
    
    
    		ldi	Licht,0b00000001			;Setze 'Licht' zurück'
    		out	PortC, Licht				;und gebe es in PortC aus
    
    		ldi	Reset,0b00000000			;Lösche das Reset-Register
    
    		reti							;Verlasse den Interrupt Handler
    
    
    
    Addiere:
    
    add      Vergleich,Wert         ;Addiere 8 zu das Vergleichregister
    ret								;Gehe wieder zurück
    
    Subthraiere:
    sub      Vergleich,Wert         ;Subthraiere 8 von dem  Vergleichregister
    ret								;Gehe wieder zurück
    
    
    Wiederherstellen:                          		    	
    ldi Vergleich,0b00100000	    ;Startwert für das Vergleichsregister 
    ret								;Gehe wieder zurück

  2. #12
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.112
    Code:
    ldi   Arbeit,0b00000111           ;PB0 und PB1 und PB2 bekommen Pullup Widerstände
    out   DDRB, Arbeit
    Ne, so sind es Ausgänge!
    DDRB = 0bxxxxx000
    und
    PORTB = 0bxxxxx111
    Gruß

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.10.2008
    Alter
    33
    Beiträge
    110
    Danke für die Antwort.... a
    ber das hat immer noch nicht geändert.
    Hat jemand Rat parat?Wäre riesig Dankbar dafür


    Liebe Grüße
    Namenlos

  4. #14
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.112
    Code:
    sbic     PINB,0                  ;Wenn Taster gedrückt PD2 = 0
    Ne, nicht PIN sondern PORT!
    Gruß

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.10.2008
    Alter
    33
    Beiträge
    110
    Hey,

    wir sind in der Schule im PC Raum...meine Güte da sind ja viel mehr
    Fehler drin als ich dachte

    Na gut...das werd ich irgendwann noch zum Laufen bekomme
    Wie schnell soll der Timer sein damit ich die Taster vernüftig
    abfragen kann ohne das diese mehrere male gezählt werden?

    Vielen Dank für eure Hilfe
    Heute werde ich das zum laufen bekommen
    \/

    Liebe Grüße
    Namenlos

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.10.2008
    Alter
    33
    Beiträge
    110
    So ich melde mich mal ich hab mir nochmal alles angeschaut und da war der
    Wurm wohl drin.

    Beim Ersten mal Läut es durch...und danach Leuchten irgendwelche LED's.
    Gerade Leuchteten alle bis auf die ersten 2.
    Dann Leuchtet nur die Erste...und dann gehen alle nach und nach an bis auf die Letzte.Und dann Leuchten alle bis auf die Erste... ich bin da irgendwie
    ziemlich Ratlos.
    Im Simulator läuft alles richtig durch wenn ich die Pins entsprechend betätige dauert ein Durchlauf auch länger....und mehrer Durchläufe hab ich mir
    auch angeschaut und alles geht.
    Kriege ja noch die Krise dabei... ist wohl doch eine Nummer zu groß

    Liebe Grüße
    Namenlos

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.10.2008
    Alter
    33
    Beiträge
    110
    Hey danke an euch nochmal
    Es Läuft jetzt!
    Jetzt muss ich nur noch den Timer,Teiler und die ganzen Werte anpassen
    damit es richtig gut läuft =D>

    Liebe Grüße
    Namenlos

  8. #18
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.112
    Versuche mal eine Abtastung von 50ms, damit kein Prellen auftritt.
    Aber: Wenn Du den Taster länger gedrückt hältst, dann wird es mehrmals erkannt. normalerweise erkennt man bei Tastern zuerst das On, wartet, bis man das Off erkennt und schaltet dann. So kann das nicht passieren...
    Viel Spass noch.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Labornetzteil AliExpress