Willkommen Gast. Bitte einloggen oder registrieren.
März 15, 2025, 20:00:26
Übersicht Ungelesene Beiträge auflisten Hilfe Suche Spiele Mitgliederkarte Kalender Login Registrieren

Schnellsuche
+  MODDING-FAQ FORUM
|-+  Alles rund ums Modden
| |-+  Elektronik, Elektrik (Moderator: TzA)
| | |-+  Taster als Schalter via AVR
  « vorheriges nächstes »
0 Mitglieder und 0 Gäste betrachten dieses Thema.
Seiten: 1 ... 7 8 9 10 11 [12] 13 14 15 16 17 nach unten Drucken
Autor Thema: Taster als Schalter via AVR  (Gelesen 152115 mal)
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #165 am: November 12, 2007, 14:25:25 »

Oh yoa das fällt mir gerade auch mal auf das der garnicht aktiviert war!
Danke für den Tip!
Dann denke ich mal das es daran liegt! Ich werde das nächste Woche mal ausprobieren...
Danke!
Gespeichert
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #166 am: November 18, 2007, 14:09:05 »

So ich habe eure tips befolgt und nun funktioniert es!
Also es lag an dem ISP der immer noch angesteckt war und daran das ich bei einem PIN vergessen habe den Pull Up Widerstand zu aktivieren.

Ich habe jetzt auch noch eine Version mit Flankenerkennung gebastelt.
Also ohne Autorepeat. Ein paar "Treiberleichen" von der noch geplanten Kommunikation per UART sind aber noch drin...

Code:
.include "m8def.inc"
.def temp1      = r16
.def temp2  = r17
.def tast_neu  = r18
.def tast_alt  = r19
.def temp_send  = r20
.def alter_taster_status= r21


.equ F_CPU = 8000000        ; Systemtakt in Hz
.equ BAUD  = 9600           ; Baudrate

; Berechnungen
.equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever runden
.equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))      ; Reale Baudrate
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille

.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))       ; max. +/-10 Promille Fehler
  .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
.endif



ldi    temp1, 0b00111111  ;PORTC -> Ausgang
out    DDRC, temp1

ldi    temp1, 0b00011111 ;PORTB -> Pull-Up Widerstände ein
out    PORTB, temp1

ldi    temp1, 0b00001100 ;PORTD -> Ausgang und Eingang
out    DDRD, temp1

ldi    temp1, 0b11100000 ;PORTD -> Pull-Up Widerstände ein
out    PORTD, temp1


ldi    tast_alt, 0b11111111

; Baudrate einstellen
        ldi temp1, HIGH(UBRR_VAL)
        out UBRRH, temp1
        ldi temp1, LOW(UBRR_VAL)
        out UBRRL, temp1


; Frame-Format: 8 Bit

        ldi temp1, (1<<URSEL)|(3<<UCSZ0)
        out UCSRC, temp1

        sbi UCSRB,TXEN

warten:

ldi temp_send, 'A'
        out UDR, temp_send
serout:
        sbis UCSRA,UDRE                   ; Warten bis UDR für das nächste
                                          ; Byte bereit ist
        rjmp serout

ldi  temp1, $FF             ; ein bisschen warten ...
wait1:
      ldi  temp2, $FF
wait2:
      dec  temp2
      brne wait2
      dec  temp1
      brne wait1




haupt:

              in   alter_taster_status, PIND             ; PIND -> temp1 (11100000)
            andi alter_taster_status, 0b11100000
            in   temp1, PINB             ; PINB -> temp2 (00011111)
            andi temp1, 0b00011111
              or   alter_taster_status, temp1         ; 11100000(temp1) und 00011111(temp2) = 11111111(temp1)



sbic PIND, 7 ; Wenn aktuelles Bit=0  springe zur Sprungmarke schleife_1
rjmp schleife_1
sbrs alter_taster_status, 7
rjmp schleife_1

pruefen_0:
sbis PORTD, 2 ; Prüfe ob das aktuelle(index=zaehler) Bit am PORTD 1 ist
rjmp an_0 ; Wenn es 0 ist tu das(Einschalten)
rjmp aus_0 ; Wenn es 1 ist tu das(Ausschalten)

an_0:
sbi PORTD, 2 ; Einschalten :P
rjmp warten


aus_0:
cbi PORTD, 2 ; Ausschalten :P
rjmp warten


schleife_1:
sbic PIND, 6 ; Wenn aktuelles Bit=0  springe zur Sprungmarke weiter_D
rjmp schleife_2
sbrs alter_taster_status, 6
rjmp schleife_2

pruefen_1:
sbis PORTD, 3 ; Prüfe ob das aktuelle(index=zaehler) Bit am PORTD 1 ist
rjmp an_1 ; Wenn es 0 ist tu das(Einschalten)
rjmp aus_1 ; Wenn es 1 ist tu das(Ausschalten)

an_1:
sbi PORTD, 3 ; Einschalten :P
rjmp warten

aus_1:
cbi PORTD, 3 ; Ausschalten :P
rjmp warten

schleife_2:
sbic PIND, 5 ; Wenn aktuelles Bit=0  springe zur Sprungmarke weiter_D
rjmp schleife_3
sbrs alter_taster_status, 5
rjmp schleife_3

pruefen_2:
sbis PORTC, 0 ; Prüfe ob das aktuelle(index=zaehler) Bit am PORTD 1 ist
rjmp an_2 ; Wenn es 0 ist tu das(Einschalten)
rjmp aus_2 ; Wenn es 1 ist tu das(Ausschalten)

an_2:
sbi PORTC, 0 ; Einschalten :P
rjmp warten

aus_2:
cbi PORTC, 0 ; Ausschalten :P
rjmp warten


schleife_3:
sbic PINB, 4 ; Wenn aktuelles Bit=0  springe zur Sprungmarke weiter_D
rjmp schleife_4
sbrs alter_taster_status, 4
rjmp schleife_4

pruefen_3:
sbis PORTC, 1 ; Prüfe ob das aktuelle(index=zaehler) Bit am PORTD 1 ist
rjmp an_3 ; Wenn es 0 ist tu das(Einschalten)
rjmp aus_3 ; Wenn es 1 ist tu das(Ausschalten)

an_3:
sbi PORTC, 1 ; Einschalten :P
rjmp warten
aus_3:
cbi PORTC, 1 ; Ausschalten :P
rjmp warten

schleife_4:
sbic PINB, 3 ; Wenn aktuelles Bit=0  springe zur Sprungmarke weiter_D
rjmp schleife_5
sbrs alter_taster_status, 3
rjmp schleife_5

pruefen_4:
sbis PORTC, 2 ; Prüfe ob das aktuelle(index=zaehler) Bit am PORTD 1 ist
rjmp an_4 ; Wenn es 0 ist tu das(Einschalten)
rjmp aus_4 ; Wenn es 1 ist tu das(Ausschalten)

an_4:
sbi PORTC, 2 ; Einschalten :P
rjmp warten

aus_4:
cbi PORTC, 2 ; Ausschalten :P
rjmp warten


schleife_5:
sbic PINB, 2 ; Wenn aktuelles Bit=0  springe zur Sprungmarke weiter_D
rjmp schleife_6
sbrs alter_taster_status, 2
rjmp schleife_6

pruefen_5:
sbis PORTC, 3 ; Prüfe ob das aktuelle(index=zaehler) Bit am PORTD 1 ist
rjmp an_5 ; Wenn es 0 ist tu das(Einschalten)
rjmp aus_5 ; Wenn es 1 ist tu das(Ausschalten)

an_5:
sbi PORTC, 3 ; Einschalten :P
rjmp warten

aus_5:
cbi PORTC, 3 ; Ausschalten :P
rjmp warten


schleife_6:
sbic PINB, 1 ; Wenn aktuelles Bit=0  springe zur Sprungmarke weiter_D
rjmp schleife_7
sbrs alter_taster_status, 1
rjmp schleife_7

pruefen_6:
sbis PORTC, 4 ; Prüfe ob das aktuelle(index=zaehler) Bit am PORTD 1 ist
rjmp an_6 ; Wenn es 0 ist tu das(Einschalten)
rjmp aus_6 ; Wenn es 1 ist tu das(Ausschalten)

an_6:
sbi PORTC, 4 ; Einschalten :P
rjmp warten

aus_6:
cbi PORTC, 4 ; Ausschalten :P
rjmp warten


schleife_7:
sbic PINB, 0 ; Wenn aktuelles Bit=0  springe zur Sprungmarke weiter_D
rjmp haupt
sbrs alter_taster_status, 0
rjmp haupt

pruefen_7:
sbis PORTC, 5 ; Prüfe ob das aktuelle(index=zaehler) Bit am PORTD 1 ist
rjmp an_7 ; Wenn es 0 ist tu das(Einschalten)
rjmp aus_7 ; Wenn es 1 ist tu das(Ausschalten)

an_7:
sbi PORTC, 5 ; Einschalten :P
rjmp haupt

aus_7:
cbi PORTC, 5 ; Ausschalten :P





      rjmp  haupt


EDIT:
Die kommentare im Code bitte ignorieren. Teilweise stimmen diese nicht bzw. ich hatte noch keine Zeit diese zu korrigieren!

EDIT SE:
So ich versuche gerade die Komuniktaion über UART. Kann es sein das dank eines rs232 Verlängerungskabels die Kommuniktaion nicht funktioniert?
Sowohl meine Version als auch das Testprogramm von Mikroknotroller.net sind nciht in der Lage irgendwas an den PC zu schicken...
Hat jemand noch ideen woran das liegen könnte?
« Letzte Änderung: November 18, 2007, 14:49:58 von Fabeulous » Gespeichert
Stukaa
Wakü-Poseidon

*

Karma: +2/-0
Offline Offline
Geschlecht: Männlich
Beiträge: 414


+_ö


Profil anzeigen
Re: Taster als Schalter via AVR
« Antwort #167 am: November 18, 2007, 19:42:12 »

hm. naja. ich könnte mir vorstellen dass das am kreuzen der adern (rxd + txd glaub ich??) liegt.. kann ja sein dass dus auf der platine gekreuzt hast, und das kabel das auch nochmal kreuzt. oder du hast es nicht gekreuzt und das kabel ist auch nicht gekreuzt. klänge jetzt so für mich plausibel
Gespeichert

digitall  Oo
PoWl
Dremelfreund

*

Karma: +0/-0
Offline Offline
Beiträge: 140


Atmel AVR Mikrocontroller


Profil anzeigen
Re: Taster als Schalter via AVR
« Antwort #168 am: November 18, 2007, 20:19:55 »

hastn schaltplan?
Gespeichert
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #169 am: November 18, 2007, 21:05:31 »

Schaltplan: http://fabeulousde.h198298.ser...Schaltplan3.png

Und das ganze lief ja schonmal. Den MAX232 habe ich auch schon ausgetauscht.
Der µC ist per Flachbandkabel mit dem Rechner verbunden bzw. dazwischen hängt ja noch das Verlängerungskabel.
Ich verstehe einfach nciht warum es nicht klappt. Es lief ja schonmal und nun empfängt er garnichts mehr...
Gespeichert
PoWl
Dremelfreund

*

Karma: +0/-0
Offline Offline
Beiträge: 140


Atmel AVR Mikrocontroller


Profil anzeigen
Re: Taster als Schalter via AVR
« Antwort #170 am: November 18, 2007, 21:10:26 »

erstmal gucken ob baudrate usw alle richtig eingestellt sind wobei da bei kleinen fehlern trotzdem irgendein kaudawelch ankommen müsste. dann die leitungen checken.  Spannungen am max prüfen und auf den com-leitungen. wenn bei mir nix geht nehm ich als n 2. AVR und reduzier das programm auf die relevanten programmteile und teste es damit.
Gespeichert
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #171 am: November 18, 2007, 23:12:46 »

Ich habe exakt diesen Code zum testen Benutzt:
Code:
.include "m8def.inc"

.def temp = r16

.equ F_CPU = 8000000        ; Systemtakt in Hz
.equ BAUD  = 9600           ; Baudrate

; Berechnungen
.equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever runden
.equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))      ; Reale Baudrate
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille

.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))       ; max. +/-10 Promille Fehler
  .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
.endif

        ; Stackpointer initialisieren
        ldi temp, LOW(RAMEND)
        out SPL, temp
        ldi temp, HIGH(RAMEND)
        out SPH, temp

        ; Baudrate einstellen
        ldi temp, HIGH(UBRR_VAL)
        out UBRRH, temp
        ldi temp, LOW(UBRR_VAL)
        out UBRRL, temp

        ; Frame-Format: 8 Bit
        ldi temp, (1<<URSEL)|(3<<UCSZ0)
        out UCSRC, temp

        sbi UCSRB,TXEN                    ; TX aktivieren

loop:   ldi temp, 'T'
        rcall serout                      ; Unterprogramm aufrufen
        ldi temp, 'e'
        rcall serout                      ; Unterprogramm aufrufen
        ldi temp, 's'
        rcall serout                      ; ...
        ldi temp, 't'
        rcall serout
        ldi temp, '!'
        rcall serout
        ldi temp, 10
        rcall serout
        ldi temp, 13
        rcall serout
        rjmp loop

serout:
        sbis UCSRA,UDRE                   ; Warten bis UDR für das nächste
                                          ; Byte bereit ist
        rjmp serout
        out UDR, temp
        ret                               ; zurück zum Hauptprogramm

Leider kam nichts an!
muss ich den Rechner jedes mal neu starten wenn ich am com port was neues anschließe?
ich habe nämlich nur einen und wechsel immer zwischen ISP und UART...
Vlt. liegt das daran ich meine rs232 unterstützt kein plug and play oder? Cheesy
Gespeichert
PoWl
Dremelfreund

*

Karma: +0/-0
Offline Offline
Beiträge: 140


Atmel AVR Mikrocontroller


Profil anzeigen
Re: Taster als Schalter via AVR
« Antwort #172 am: November 18, 2007, 23:34:50 »

was ist denn ISP? Nein ein Comport interessiert eigneltich nicht ob an ihm was angeschlossen ist oder nicht. Afaik prüft entsprechende Hard- und Software über eigene Steuersignale nach ob das richtige Gerät angeschlossen ist. Bei deinem Terminal ist das nicht der fall. Welches Terminalprogramm benutzt du denn?

mfg PoWl
Gespeichert
Reisi
Lötkolbenfreak

*

Karma: +2/-0
Offline Offline
Beiträge: 190



Profil anzeigen
Re: Taster als Schalter via AVR
« Antwort #173 am: November 19, 2007, 12:22:33 »

Die häufigste Fehlerursache beim UART hat immer was mit dem Takt zu tun. Was für eine Taktquelle hast du denn momentan?
Gespeichert
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #174 am: November 19, 2007, 16:08:55 »

Mein ISP wird auch über rs232 augesteuert und ich muss halt immer zwischen dem ISP und dem MIkrocontrolelr wechseln...

Ich benutze als Taktquelle ein 8 Mhz Quarz.
Als Terminal Programm habe ich Hyperterminal.
Gespeichert
PoWl
Dremelfreund

*

Karma: +0/-0
Offline Offline
Beiträge: 140


Atmel AVR Mikrocontroller


Profil anzeigen
Re: Taster als Schalter via AVR
« Antwort #175 am: November 19, 2007, 16:13:54 »

ach ISP.. ja jetzt hab ichs gerafft..
also mal abgesehen von der Problematik, probier doch mal HTerm, finde das isn super programm!

lg PoWl
Gespeichert
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #176 am: November 22, 2007, 16:51:32 »

Geil. Erstmal danke für das programm. ich hab mir schon seit längerem gedacht das es doch auch was moderneres als Hyperterminal geben muss... Cheesy
Vor allendingen kann man damit auch senden oder? Also zumindest habe ich meiner minung nach direkt verstanden wie Tongue

Ach damit euch nicht langweilig wird hab ich mal ein paar Bilder gemacht:


Mein kleiner Arbeitsplatz Cheesy


Die Hauptplatine


Das ist die Platine an die die Taster angeschlossen sind welche dann per Flachbandkabel mit dem µC verbunden sind - Was man eigentlich auch sehen kann Cheesy

Ich mache euch jetzt auch nochmal ein kleines Bilderbuchbild um das mit dem ISp nochmal zu erläutern...

EDIT:
Da fehlt natürlich noch die Relaisplatine. Aber ich will euch ja nicht schon alles zeigen.. außerdem hab ich die Kamera gerade wieder eingepackt Cheesy

Hier mein kleines Bildchen ich hoffe ihr wisst nun was ich meinte. Sorry für die Schelchte Pain bearbeitung...


« Letzte Änderung: November 22, 2007, 17:00:08 von Fabeulous » Gespeichert
PoWl
Dremelfreund

*

Karma: +0/-0
Offline Offline
Beiträge: 140


Atmel AVR Mikrocontroller


Profil anzeigen
Re: Taster als Schalter via AVR
« Antwort #177 am: November 22, 2007, 16:59:10 »

Krasse Schaltung :-D

Bleiben die kleinen Tasterchen bei dir im Steckboard? Meine Springen immer raus, hab dazu die beinchen um 90° gedreht (gebogen)
Gespeichert
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #178 am: November 22, 2007, 17:01:57 »

Danke danke Cheesy
Ja mittlerweile schon. Also die Beinchen waren ja von beginn an ein bischen gekrümmt. Ich vermute damit sie sich in die eigentliche Platine einhaken. Ich hab die Beine dann einfach gerade gemacht und nun blieben sie Stecken. Aber auch nur wenn man sie sanft dazu zwingt...
Gespeichert
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #179 am: November 22, 2007, 17:09:05 »

So nochmal danke für HTERm. Damit empfängt mein PC nämlich was.
Wie darf man denn das Prgramm verstehen?

Ich habe das folgende Bild folgendermaßen interpretiert:

Diese 12 Fächer(Welche so ein bischen aussehen wie eine Tabelle) zeigen die letzten 12 empfangenen bytes an richtig?

Pro byte sind die werte in Ascci, Hex, Dec, und Bin angegeben(deswegen auch die verschiedenfarbigen Zeilen) richtig?
« Letzte Änderung: November 22, 2007, 17:12:28 von Fabeulous » Gespeichert
Seiten: 1 ... 7 8 9 10 11 [12] 13 14 15 16 17 nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Einloggen mit Benutzername, Passwort und Sitzungslänge      

Powered by MySQL Powered by PHP
eXTReMe Tracker
Seite erstellt in 0.017 Sekunden mit 17 Zugriffen.
© 2001-2022 MODDING-FAQ FORUM | SMF
Alle Rechte vorbehalten.
Prüfe XHTML 1.0! Prüfe CSS!