Willkommen Gast. Bitte einloggen oder registrieren.
März 16, 2025, 06:40:01
Übersicht Ungelesene Beitrge 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 1 Gast betrachten dieses Thema.
Seiten: 1 ... 4 5 6 7 8 [9] 10 11 12 13 14 ... 17 nach unten Drucken
Autor Thema: Taster als Schalter via AVR  (Gelesen 152220 mal)
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #120 am: Juli 31, 2007, 14:30:03 »

So ich bin es mal wieder!
Ich habe nun den ULN2803 angeschlossen! Das klappt auch alls sehr schön! Ich habe mal ein Lauflicht damit ausprobiert... guckt ihr hier -->Video
man sieht es zwar nicht wirklich gut da die Led's sehr hell sind aber ich denke ein bischen erkennt man Tongue

Hier nochmal das ganze als Bild:


Die kommenden tage wird wohl erstmal nix passieren da ich erstmal wieder Lötzinn einkaufen muss...
Aber dann wird es weiter gehen:
-der Max232 muss noch verkabelt werden
-und noch ein paar taster anschlüsse...

Ach so ist es eigentlich normal das der ULN2803 sich etwas erwärmt? Ich denke mal ja aber ist es auch normal das die Widerstände der Led's heiß werden? Ich denke das das wahrschienlicha uch normal ist richtig?
Gespeichert
PoWl
Dremelfreund

*

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


Atmel AVR Mikrocontroller


Profil anzeigen
Re: Taster als Schalter via AVR
« Antwort #121 am: August 2, 2007, 16:42:32 »

So, hier mal mein Senf dazu. Man kann an Port D 8 Taster gegen Masse anschließen. Pull-Ups sind schon im AVR aktiviert. An Port B hat man die 8 Ausgänge. Debounce ist softwareseitig auch schon drin.

Code:
.include "m8def.inc" ; Deklarationen für ATmega8

.equ in_port = PORTD ; Input Port
.equ in_pin = PIND ; Input Pin

.equ out_port = PORTB ; Output Port
.equ out_ddr = DDRB ; Output DDR

.equ start = 0b00000000 ; Startwert

.equ waitms = 1 ; Wartezeit für Debounce in ms
.equ freq = 1000000 ; Takt in Hz

.cseg ; Programm-Flash
ser R16 ; 0xFF ins Register R16 laden
out out_ddr, R16 ; Port B als Ausgang definieren
out in_port, R16 ; Pull-Up Widerstände aktivieren

ldi R16, start ; Startwert laden

; Arbeitsschleife
; R16 = Output Register
; R17 = Input Register
; R18 = Input Register kopie
; R19 = Letzter Input

; Tasterstatus laden und sichern
loop: in R17, in_pin ; PortD in R17 laden
mov R18, R17 ; R18 in R17 kopieren

; Lösche Bit in R17 wenn Bit in R19 = 1
com R19 ; R19 komplementieren
and R17, R19 ; Lösche Bit in R17 wenn Bit in R19 = 0

; Letzten Input in R19 laden
mov R19, R18 ; R18 in R19 kopieren

; Output ändern und ausgeben
eor R16, R17 ; Komplementiere Bit in R16 wenn Bit in R17 = 1
out out_port, R16 ; R16 an PortB


; XL = R26 16Bit Counter Low
; XH = R27 16Bit Counter High
.equ waitcircles = (((freq / 1000) * waitms) / 4) - 3

        ldi XL, LOW(waitcircles) ; Zähler Low in R17 laden 1 Takt
        ldi XH, HIGH(waitcircles) ; Zähler High in R18 laden 1 Takt

wait: sbiw XL, 1 ; Zähler dekrementieren 2 Takte
brne wait ; Springe zu wait wenn nicht 0 2 Takte bei != 0, 1 Takt bei == 0

rjmp loop ; Endlosschleife

Sry dass das so deformiert ist. Im AVR-Studio gehts dann. Einfach reinkopiern. Hoffe das funktioniert so, habs nich mehr getestet^^

mfg PoWl
Gespeichert
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #122 am: August 2, 2007, 16:50:34 »

Cool, danke!
Ich werde mir das gleich mal angucken. Habe mich im Moment noch garnicht mit der Software beschäftigt...
Danke
Gespeichert
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #123 am: August 10, 2007, 16:33:53 »

So... Ich bin mittlerwiele natürlich etwas weiter gekommen:

Die Hauptplatine ist soweit fertig gelötet... nun fehlt nur noch die Software...


Die Platine welche auf die Hauptplatine gesteckt wird und an welche die Relais angeschlossen sind und auch die Schraubklemmen für die Verbraucher...


Beides zusammengesteckt...


Das ganze habe ich schon recht kompakt mit dem restlichen Elektronikkram, wie Inverter für Kaltlichtkathoden oder ähnliches, in ein alte Hülle eines CD Rom laufwerks verbaut...

Kann mir noch jemand beantworten ob ich mir sorgen machen muss wenn der ULN2803 und die Vorwiderstände der LED's warm bzw. heiß werden?!
Danke
Gespeichert
Reisi
Lötkolbenfreak

*

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



Profil anzeigen
Re: Taster als Schalter via AVR
« Antwort #124 am: August 10, 2007, 18:57:32 »

Kann mir noch jemand beantworten ob ich mir sorgen machen muss wenn der ULN2803 und die Vorwiderstände der LED's warm bzw. heiß werden?!
Danke
Naja, die daran abfallende Leistung wird eben mal in Wärme umgesetzt, solange die zulässigen Parameter eingehalten werden ist das kein Problem.

PS: Die Relaisverkabelung ist ganz schön mutig, gibt bei jedem Umschalten einen schönen Störsender ab.
Gespeichert
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #125 am: August 10, 2007, 23:27:35 »

Okay inwiefern meinste das und was kann man dagegen tun? Geht das "Störsenden" von den Kabneln aus oder von den Relais?! Brauche ich dann abgeschirmte Kabel? Cheesy
Gespeichert
TzA
Modder der Apokalypse

*

Karma: +10/-0
Offline Offline
Geschlecht: Männlich
Beiträge: 1166



Profil anzeigen
Re: Taster als Schalter via AVR
« Antwort #126 am: August 11, 2007, 00:41:49 »

Stösenden tut da nix wesentliches, dafür ist das das alles zu niederfrequent.
Ich hätte da eher Bedenken, dass sich mal ein Kabel löst und dann einen Kurzschluss verursacht, man könnte die Relais ja auch auf die Platine löten, dann fliegt nichts in der Gegend herum.

Ob du dir Sorgen wegen der Erwärmung machen musst, kommt darauf an wie groß diese ist.
Bei den LED-Vorwiderständen kannst du ganz einfach ausrechnen, welche Leistung an ihnen abfällt, und dass mit der angegeben Maximalbelastbarkeit vergleichen.
Beim ULN muss man im Prinzip den im Datenblatt angegebenen Wärmewiderstand (Junction to Case Ambient interessiert hier) und die maximale Temperatur nachsehen, daraus kann man dann die maximale Verlustleistung berechnen.
Aber sofern das Gehäuse noch so kalt ist, dass man es dauerhaft anfassen kann, ohne sich die Finger zu verbrennen, ist es unbedenklich.

Edit: Junction to Ambient ist natürlich der benötigte Wärmewiderstand, thx@b0nze
« Letzte Änderung: August 11, 2007, 16:38:28 von TzA » Gespeichert

You need only two tools. WD-40 and duct tape. If it doesn't move and it should, use WD-40. If it moves and shouldn't, use the tape
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #127 am: August 11, 2007, 15:28:45 »

Yoa okay dann lass ich die Verkabelung ersmal so...
Anlöten wäre mir auch lieber, leider passen die Relais nicht auf das mein Rastermaß... Und ich werde die Relais natürlich auch noch im CD-Rom gehäuse befestigen...
Der ULN2803 wird nur so warm das man ihn locker noch anfassen kann, die Widerstände dagegen weniger... ich werde das mal ausrechnen...
Danke erstmal!
Gespeichert
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #128 am: August 12, 2007, 18:13:05 »

So jungs ich habe ein Problem... ich versuche die Fusebits einzustellen...
Undzwar so das mein externes 8 Mhz Quarz als Taktgeber erkannt wird... ich habe jetzt alles gelesen aber irgendwie weis ich jetzt trotzdem ncith genau was ich da wo einstellen muss?!
Könnte sich jemand erbarmen mir ein mini how to zu schreiben?
In untertänigster Dankbarkeit und grenzenloser liebe Fabeulous
Gespeichert
PoWl
Dremelfreund

*

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


Atmel AVR Mikrocontroller


Profil anzeigen
Re: Taster als Schalter via AVR
« Antwort #129 am: August 13, 2007, 00:38:57 »

Du musst bei deinem ATmega die Fuses CKSEL 3, 2 und 1 auf "1" stellen. Das bedeudet hier unprogrammed. Je nachdem was fürn progg du nutzt. Bei meinem Ponyprog bedeutet unchecked = 1 = unprogrammed. D.h. man muss die jeweiligen Checkboxen unchecken also leer machen, keine häkchen drin. CKOPT solltest du auch auf 1 stellen können.

Steht übrigens alles im Manual so drin^^ ich hoff mal ich hab das richtig interpretiert^^
Gespeichert
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #130 am: August 13, 2007, 15:07:39 »

Okay danke ich habe es gestern nochmal in einem waghalsigem eigenversuch versucht... hat wohl auch geklappt zumindest läuft bzw. lief der avr gestern immernoch...
Aber dadurch machte sich direkt das nächste Prolem bekannt...
Ich hab dann versucht per rs232 mit dem pc zu kommunizieren dazu habe ich einfach mal das kleine testprogramm aus dem tutorial von mikrocontroller.net benutzt... leider funktionierte das nicht... hat jemand eine idee woran das liegen könnte?
Gespeichert
Reisi
Lötkolbenfreak

*

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



Profil anzeigen
Re: Taster als Schalter via AVR
« Antwort #131 am: August 13, 2007, 15:17:07 »

... leider funktionierte das nicht...
Mit dieser detailreichen Fehlerbeschreibung kann dir glaub ich keiner helfen. Mehr Infos! Was funktioniert nicht? Gibts schon beim compilieren einen Fehler? Zeigt das Terminal gar ncihts an, oder nur Quatsch? Welche Baudrate? ...
Gespeichert
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #132 am: August 13, 2007, 16:00:08 »

Sorry ich war gerade unter Zeitdruck weil mein Chef jheden moment reinplatzen konnte... Also nochmal ausführlich:
Ich hab aus diesem Tutorial http://www.mikrocontroller.net...-Tutorial:_UART
Diesen Code genommen:
Code:
.include "m8def.inc"

.def temp = r16
.equ CLOCK = 4000000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1

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

        ; Baudrate einstellen
        ldi temp, HIGH(UBRRVAL)
        out UBRRH, temp
        ldi temp, LOW(UBRRVAL)
        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

Hyper Terminal habe ich dann auch so eingestellt wie es angegeben war... nur leider kommt bei Hyper Terminal garnichts an! Also der Bildschirm bliebt weis...

Ich werde es jetzt nochmal probieren... Danke

EDIT:
So nun geht es... zumindest empfängt er etwas aber es komtm nur buchstabensalat an... falls es hilft ungefähr sowas Cheesy
Code:
oï!„w„»8¿!„ww„w„w„ï!„w„ï!„w„„w„w„„w„w„~Ý„w„ww„w„w„ôw„w„w!„w„w„î„w„w„ï!„w„wG
w„w„w„w„w8„w„w„w„w„w„„w„w„ï!„w„Ó»8¿!„!„w„w„w„w„wï!„w„ôw„w„ww„w„wï!„w„wï!„w„w
„w„w!„w„wG¿!„w„ôw„w„wï!„w„†~Ý„w„~Ý„w„w

Ich habe leider keien Ahnung woran es liegt... Sad

EDIT Again:
So jetzt geht es! Cheesy
Es lag daran das bei der Variable Clock 4000000 eingestellt war... ich hab mir einfach mal gedacht das steht für den Wert der Taktfrequenz. ICh habe das ganze dann auf 8000000 gestellt und nun geht es mit dem Testprogramm!
« Letzte Änderung: August 13, 2007, 16:26:51 von Fabeulous » Gespeichert
Fabeulous
Gast


E-Mail
Re: Taster als Schalter via AVR
« Antwort #133 am: August 13, 2007, 23:40:53 »

So Sorry für die ganzen Doppelposts aber sonst merkt ihr ja nicht das hier was neues ab geht Tongue
Also wie geh ich das denn jetzt am besten an?! Ich mein Programmiertechnisch ist das ja nicht so ganz einfach da ja am PORTC sowohl Eingänge der Taster als auch Ausgänge der LED's hängen...

Ich hab mir gedacht das das bestimmt mit so befehlen wie cbi und sbi funktionieren kann nur leider habe ich noch keine genaue vorstellung wie ich anfangen soll...

Bisher habe ich nur die Anfangskonfiguration der einzelnen Pins
Code:
.include "m8def.inc"

sbi DDRC, 0        ; Bit 0 DDRC auf 1 setzen -> Ausgang
sbi DDRC, 1        ; Bit 1 DDRC auf 1 setzen -> Ausgang
sbi DDRC, 2        ; Bit 2 DDRC auf 1 setzen -> Ausgang
sbi DDRC, 3        ; Bit 3 DDRC auf 1 setzen -> Ausgang
sbi DDRC, 4        ; Bit 4 DDRC auf 1 setzen -> Ausgang
sbi DDRC, 5        ; Bit 5 DDRC auf 1 setzen -> Ausgang

sbi DDRD, 2        ; Bit 2 DDRD auf 1 setzen -> Ausgang
sbi DDRD, 3        ; Bit 3 DDRD auf 1 setzen -> Ausgang

cbi DDRB, 0        ; Bit 0 DDRB auf 0 setzen -> Eingang
cbi DDRB, 1        ; Bit 1 DDRB auf 0 setzen -> Eingang
cbi DDRB, 2        ; Bit 2 DDRB auf 0 setzen -> Eingang
cbi DDRB, 3        ; Bit 3 DDRB auf 0 setzen -> Eingang
cbi DDRB, 4        ; Bit 4 DDRB auf 0 setzen -> Eingang
cbi DDRB, 5        ; Bit 5 DDRB auf 0 setzen -> Eingang

cbi DDRD, 6        ; Bit 6 DDRD auf 0 setzen -> Eingang
cbi DDRD, 7        ; Bit 7 DDRD auf 0 setzen -> Eingang


sbi PORTB, 0        ; Bit 0 im IO-Register PORTB auf 1 setzen -> Pull-Up Ein
sbi PORTB, 1        ; Bit 1 im IO-Register PORTB auf 1 setzen -> Pull-Up Ein
sbi PORTB, 2        ; Bit 2 im IO-Register PORTB auf 1 setzen -> Pull-Up Ein
sbi PORTB, 3        ; Bit 3 im IO-Register PORTB auf 1 setzen -> Pull-Up Ein
sbi PORTB, 4        ; Bit 4 im IO-Register PORTB auf 1 setzen -> Pull-Up Ein
sbi PORTB, 5        ; Bit 5 im IO-Register PORTB auf 1 setzen -> Pull-Up Ein

sbi PORTD, 6        ; Bit 5 im IO-Register PORTD auf 1 setzen -> Pull-Up Ein
sbi PORTD, 7        ; Bit 5 im IO-Register PORTD auf 1 setzen -> Pull-Up Ein


ende:    rjmp ende           ; Sprung zur Marke "ende" -> Endlosschleife



vlt. ist das ja schon ein anfang!?
Gespeichert
PoWl
Dremelfreund

*

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


Atmel AVR Mikrocontroller


Profil anzeigen
Re: Taster als Schalter via AVR
« Antwort #134 am: August 14, 2007, 00:57:27 »

Hm, ganz schön arg viel aufwand, Register mit einzelnen Werten zu belegen und dann an den Port auszugeben ist dahingegen etwas einfacher :-)

ldi      R16, 0b00111111
out    DDRC, R16
out    PORTB, R16

ldi      R16, 0b00001100
out    DDRD

ldi      R16, 0b11000000
out    PORTD

Um einen Port als Eingang zu definieren brauchst du das DDR nicht mit nullen zu belegen da es das nach dem Reset sowieso schon ist.

So, was jetzt kommt ist dass du in einer schleife erstmal bei jedem durchlauf die Taster abfragen musst, am besten du ließt PinC ein, dann PinD in ein anderes Register, setzt die bitpositionen 2 und 3 mit swap nach 6 und 7 und fügst die beiden register mit or zusammen. dann hast du erstmal den status aller 8 taster in einem register.

Schauen wir uns Taster1 an. Taster 1 hat die Bitposition 0. Nun müssen wir um dafür bei gedrückter Taster, also ist an der 0ten bitposition eine logische 0, da der taster ja nach masse zieht, eine aktion auszuführen und verhindern dass diese Aktion beim nächsten durchlauf nochmal ausgeführt wird. Dazu müssen wir bei diesem Schleifendurchlauf wissen ob der Taster im letzten durchlauf schon gedrückt war. Ist dem nun so, müssen wir unsere logische 0 an unserer bitposition für taster1 wieder in eine logische 1 verwandeln um zu verhindern dass die entsprechende aktion ausgeführt wird. Assembler bzw der µC selbst stellt befehle bereit mit denen man das für alle 8 bits gleichzeitig machen kann.

Wie sowas im programm aussieht hab ich ja schonmal gepostet, allerdings war da noch ein fehler drin.. das programm war auf taster ausgelegt die auf Vcc ziehen^^ war mein erstes programm und da wusste ich noch nicht so recht dass man die dinger eher auf masse ziehn lässt^^

naja, hf..
ciao Powl
Gespeichert
Seiten: 1 ... 4 5 6 7 8 [9] 10 11 12 13 14 ... 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.018 Sekunden mit 17 Zugriffen.
© 2001-2022 MODDING-FAQ FORUM | SMF
Alle Rechte vorbehalten.
Prüfe XHTML 1.0! Prüfe CSS!