Forum: Mikrocontroller und Digitale Elektronik ATTiny 2313 LED Lauflicht - Schaltung so Richtig?


von Bastian Schroll (Gast)


Angehängte Dateien:

Lesenswert?

Guten Abend allerseits.

Da ich mich momentan mit der uC Elektronik ein wenig beschäftige, habe 
ich mir nun ein erstes kleines Projekt überlegt. Ich bin mir allerdings 
nicht sicher, ob der Schaltplan so auch funktioniert. Könnte sich das 
ganze mal jemand kurz ansehen und mir sagen ob das so möglich wäre?

MfG Bastian Schroll

: Gesperrt durch User
von Karl H. (kbuchegg)


Lesenswert?

Wenn du die Taster T2 und T3 nach Masse schalten lässt kannst du dir die 
beiden 10k Widerstände sparen. Du brauchst dann Widerstände nach +5V und 
die hat der Tiny bereits eingebaut. Die lassen sich im Tiny per Program 
aktivieren.

Abgesehen davon. Ist ja sonst nicht viel übrig in der Schaltung :-) Ja, 
müsste laufen.

von Leopold S. (leopold)


Lesenswert?

Hallo!
Würde es nicht reichen wenn ein LED-Vorwiderstand zwischen LEDs und GND
an Stelle der vielen Vorwiderstände in der Schaltung sind?!

von MarioT (Gast)


Lesenswert?

Leopold Schilling schrieb:
> Hallo!
> Würde es nicht reichen wenn ein LED-Vorwiderstand zwischen LEDs und GND
> an Stelle der vielen Vorwiderstände in der Schaltung sind?!

Wenn Du immer nur eine LED einschaltest, Ja.

von Bastian Schroll (Gast)


Lesenswert?

Ne es sollen aba auch mal alle Gleichzeitig leuchten, deshalb hat ja 
jeder einein eigenen R. Und das mit den Tastern hab ich jetzt nich so 
ganz kapiert.

Also es soll immer n Low Pegel anliegen, und wenn ich drück solls High 
sein, wie müsst ich es dann beschaten? Die Taster gehen jetz ja gegen 
VCC und die Pulldown's gegen GND. Was müsste daran dann geändert werden?

Gruß basti

von Karl H. (kbuchegg)


Lesenswert?

Bastian Schroll schrieb:

> Also es soll immer n Low Pegel anliegen, und wenn ich drück solls High
> sein, wie müsst ich es dann beschaten?

So wie du das hast.

Aber niemand sagt, dass das so sein muss.
An den Eingängen kann genausogut ständig ein High-Pegel anliegen und 
wenn man den Taster drückt, geht der Eingang auf Low.

Vorteil: Einfachere Schaltung, weil du dann die im µC eingebauten 
Pull-Up Widerstände benutzen kannst.

von Bastian Schroll (Gast)


Lesenswert?

Was würde passieren, wenn man Software mäßig vergisst, die Pull Ups zu 
aktivieren? Kann dann irgendwas schaden nehmen? Den die Schaltung ist 
auch für einen Laien als einführung gedacht, der noch weniger Ahnung hat 
als ich, und daher möchte ich solche Fehler quelen für ihn vermeiden.

Und würde sich dann die Abfrage Routine in Bascom ändern wenn die Taster 
auf Low ziehen?

Gruß Basti

von Bastian Schroll (Gast)


Angehängte Dateien:

Lesenswert?

So habe den Schaltplan noch leicht erweitert, da 5V ja nciht auf Bäumen 
wachsen und das ganze so einfacher einzubinden ist.

Aber wie sieht das ganze den nun mit der Frage aus meinem Vorpost aus?

Bastian Schroll schrieb:
> Was würde passieren, wenn man Software mäßig vergisst, die Pull Ups zu
> aktivieren? Kann dann irgendwas schaden nehmen? Den die Schaltung ist
> auch für einen Laien als einführung gedacht, der noch weniger Ahnung hat
> als ich, und daher möchte ich solche Fehler quelen für ihn vermeiden.
>
> Und würde sich dann die Abfrage Routine in Bascom ändern wenn die Taster
> auf Low ziehen?

Gruß Basti

von Mike C. (chaosmike)


Lesenswert?

Hey Leute

Ich hab erst vor kurzem angefangen mit Mikrocontrollern herum zu 
experimentieren.

Ich hab schon mal ein Lauflicht hinbekommen, da wollte ich den Code so 
um ändern dass es den Effekt vom Knight Rider ergibt, doch daran bin ich 
gescheitert.
Ausserdem funktioniert der Code vom Lauflicht auch nicht mehr obwohl ich 
alles rückgängig gemacht habe.

Hat vielleicht jemand ein Code von nem Knight Rider Effekt, mit dem ich 
dann weiter experimentieren kann?
Die Led's hängen an den Ports B...
Und ich habe ein Quarz von 4Mhz verbaut.


(Sorry das ich das in diesem Forum frage, sagen wir ich hab ein 9600 
BAUD (8N1) Signal das z.b so aussieht CC00154434 was in Binär 
1100110000000000000101010100010000110100 so aussieht, könnte ein 
ATmega16 darauf reagieren, z,b ein Port auf high setzen ???

Vielen Dank

von Giuseppe G. (Firma: ACS) (gcrax)


Lesenswert?

Hallo Bastian.

Gutes startprojekt erstmal :-)
so in etwa hab ich damals auch angefangen :-)
und auch das mit dem knight rider hab ich damals auch hinbekommen :-)

mir is grade nicht ganz so klar, was du mit T1 und T2 machen willst...
sollen die in dieser schaltung irgendeine funktion haben??
Du hast in der schaltung kein quarz drin, willst du wirklich dein 
projekt ohne aufbauen und nur den internen quarz von 1MHz verwenden??

>Was würde passieren, wenn man Software mäßig vergisst, die Pull Ups zu
>aktivieren? Kann dann irgendwas schaden nehmen? Den die Schaltung ist
Nein, die schaltung nimmt an sich keinen schaden, aber es kann passieren 
das das programm nicht mehr zu 100% stabil läuft und sich beim drücker 
der taster aufhängt, aber wie gesagt, es kann, muss aber nicht...
kommt immer drauf an, wie du die register setzt.

>Und würde sich dann die Abfrage Routine in Bascom ändern wenn die Taster
>auf Low ziehen?
klar ändert sich das, jenachdem wie du die register schaltest. s.o.


@Mike
>Hat vielleicht jemand ein Code von nem Knight Rider Effekt, mit dem ich
>dann weiter experimentieren kann?
>Die Led's hängen an den Ports B...
>Und ich habe ein Quarz von 4Mhz verbaut
Ich hätte schon einen Code für dich, aber hier gehts ja in erster linie 
darum, das du es lernst zu verstehen, wie es funktioniert :-)
wie wärs denn mit einem lösungsansatz von dir und dann helfen wir dir 
alle??
vielleicht ne schaltung? welchen MC du nutzt, wie du vorgehst, deine 
bisherigen codes?? usw.



>(Sorry das ich das in diesem Forum frage, sagen wir ich hab ein 9600
>BAUD (8N1) Signal das z.b so aussieht CC00154434 was in Binär
>1100110000000000000101010100010000110100 so aussieht, könnte ein
>ATmega16 darauf reagieren, z,b ein Port auf high setzen ???
klar geht das, wenn du weisst, wie du es programmieren musst :-)
hier gilt auch natürlich, wie willst du es denn ansteuern?? 
terminal-programm oder fertige software??
was genau willst du erreichen?? usw...
bei fragen einfach melden :-)


--------------------------------------------------------------------
!! Wer etwas WILL findet Wege, wer etwas NICHT WILL findet Gründe !!

if (ahnung == 0) {
  lese FAQ; nutze die SUCHE; nutze GOOGLE;
}
else {
  use brain; make post;
  oder einfach FRESSE HaLTEN :-)
}

von Mike C. (chaosmike)


Angehängte Dateien:

Lesenswert?

ok
Die angehängte Datei war zunächst nur eine blinkende Led dann hab ich 
daraus ein Flip Flop gemacht und dann hab ich noch weitere Led's 
beigefügt.

Der IC ist ein At90S2313 mit einem Quarz von 4Mhz und 7Led's von Portb,0 
bis PortB,6

Nun zum Knight Rider
Ich weis dass jeder Port eine Adresse hat z,b 0x01 oder 0b0000001
ich denke das also ein Teil des codes z,b so aussehen könnte

0b0000001
???
0b0000010
???
0b0000100
???
0b...
???
0b0000010
???
0b0000001

Anstelle der Fragezeichen müsste jetzt noch ein Befehl kommen dass er 
1sek z,b warten muss (glaube:(wait:1000ms))
Ausserdem muss er wissen das die PORTB Ausgänge sind und wann sie ein 
und ausgeschaltet werden müssen.

Das sind +/- momentan meine Kenntnisse über Mikrocontroller

Zu der Frage mit 9600Baud 8N1, ich hab ein RFID Türöffner gebaut mit dem 
SFchip "SF6107" (sfchip.de)der sendet so ein Signal aus sobald ein Tag 
gefunden wurde, so ich würde dieses Signal gerne an ein uC anlegen um 
Namen über ein LCD Bildschirm auszugeben, dass heisst jede Binär Zahl 
bekommt einen Namen sobald der Tag gefunden wurde vom Sfchip öffnet der 
die Tür und der uC zeigt den Namen des Besitzers des Tags an.
Puh so Danke

Danke

von Karl H. (kbuchegg)


Lesenswert?

Ich empfehle ein Studium des AVR-Tutorial

Und dies Sache mit dem Türöffner: Stell sie erst mal zurück, bis du die 
Basissachen einigermassen sicher beherrscht.

von Giuseppe G. (Firma: ACS) (gcrax)


Lesenswert?

Ich schliesse mich auch der aussage von Karl Heinz an...
Bevor du überhaupt etwas schwieriges planst, sieh zu das du das 
kinderleichte ding erstmal zu laufen bekommst...

>Anstelle der Fragezeichen müsste jetzt noch ein Befehl kommen dass er
>1sek z,b warten muss (glaube:(wait:1000ms))
>Ausserdem muss er wissen das die PORTB Ausgänge sind und wann sie ein
>und ausgeschaltet werden müssen.
ganz genau so sieht es aus :-)
es gibt auch den befehl wait 1 anstatt wait 1000ms, is eh das selbe :-)
aber wenn du 100%ige zeiten erreichen willst, nimm ne schaltung mit 
quarz, statt die von bastian, die sind fast 100%ig.

zu deinem programm. wie wärs hiermit??

ANFANG:
-MCU Einstellungen (CPU,Takt,FLOW,STACK...)
-Portregister als In/Out setzen.
-lauflicht erstellen indem du immer von LED zu LED wechselst und 
dazwischen immer nur zb. 1sec wartest?? und am ende, lässt du dieses 
lauflicht genauso wieder rückwärts laufen?? solltest du eh schon kennen 
denk ich mal....

gibt zwar auch feinere methoden, aber das is so ziemlich das einfachste 
knight rider lauflicht, das du hinbekommen wirst...

lg Giuse

--------------------------------------------------------------------
!! Wer etwas WILL findet Wege, wer etwas NICHT WILL findet Gründe !!

if (ahnung == 0) {
  lese FAQ; nutze die SUCHE; nutze GOOGLE;
}
else {
  use brain; make post;
  oder einfach FRESSE HaLTEN :-)
}

von Karl H. (kbuchegg)


Lesenswert?

G. G. schrieb:

>>Anstelle der Fragezeichen müsste jetzt noch ein Befehl kommen dass er
>>1sek z,b warten muss (glaube:(wait:1000ms))
>>Ausserdem muss er wissen das die PORTB Ausgänge sind und wann sie ein
>>und ausgeschaltet werden müssen.
> ganz genau so sieht es aus :-)
> es gibt auch den befehl wait 1 anstatt wait 1000ms, is eh das selbe :-)
> aber wenn du 100%ige zeiten erreichen willst, nimm ne schaltung mit
> quarz, statt die von bastian, die sind fast 100%ig.

Er ist mit Assembler unterwegse.
Die Verwechslung mit BASCOM ist nur deswegen passiert, weil er einen 
alten Thread gekapert hat.

von Giuseppe G. (Firma: ACS) (gcrax)


Lesenswert?

Hast Recht Karl Heinz, habs übersehn... :-)
Muss mal meine Sekretärin anschnautzen, der Kaffe war doch viel zu 
leicht heut morgen :-) Ich ziehs zurück :-)
Aber trotzdem, mal sehn, was er hinbekommt :-)

schönen Arbeitstag an euch alle...
LG Giuse

von Mike C. (chaosmike)


Lesenswert?

Nun dass ich das mit dem Türöffner und dem uC nocht nicht hinkrieg ist 
mir klar, es sollte ja auch nicht gleich sein und ausserdem ist es nur 
eine Erweiterung des Tüöffners da der Türöffner schon besteht.

Probiere jetzt mal den Code zu schreiben.
/-:

von Mike C. (chaosmike)


Lesenswert?

Hi Leute
hier hab ich mal das Lauflicht aber weiss jetzt nicht welche Befehle wie 
umgeschrieben werden müssen um ein KITT Lauflicht daraus zu machen ???
Könnte ich ein paar Tipps bekommen

Hab aber bemerkt dass z,b:

lsl ll        ; Lauflicht um 1 Bit nach links 
weiterschieben
das kann beim KITT keine anwendung finden, oder das:

cpi ll,0x00    ; Wenn Lauflicht durchgelaufen ist dann wieder am Anfang 
beginnen
    brne loop_wait



.include "2313def.inc"

; Interrupt Vector Table
.cseg
.org 0x00        ; Reset-Address
    rjmp Reset
.org 0x01        ; External Interrupt0 Vector Address
    reti
.org 0x02        ; External Interrupt1 Vector Address
    reti
.org 0x03        ; Input Capture1 Interrupt Vector Address
    reti
.org 0x04        ; Output Compare1 Interrupt Vector Address
    reti
.org 0x05        ; Overflow1 Interrupt Vector Address
    reti
.org 0x06        ; Overflow0 Interrupt Vector Address
    reti
.org 0x07        ; UART Receive Complete Interrupt Vector Address
    reti
.org 0x08        ; UART Data Register Empty Interrupt Vector Address
    reti
.org 0x09        ; UART Transmit Complete Interrupt Vector Address
    reti
.org 0x0a        ; Analog Comparator Interrupt Vector Address
    reti


.DEF temp = R16        ; Universalregister
.DEF i = R17        ; Schleifenregister
.DEF j = R18
.DEF k = R19
.DEF ll = R20        ; Lauflicht

Wait:          ; Warteschleife
    ldi k,200
loop_k:
    nop
    nop
    dec k
    cpi k,0xFF
    brne loop_k
    dec j
    cpi j,0xFF
    brne Wait
    dec i
    cpi i,0xFF
    brne Wait
    ret

Reset:
    ldi temp,LOW(RAMEND)    ; Stackpointer initalisieren
    out SPL,temp

    ldi temp,0xFF      ; PORTB auf Ausgabe setzen
    out DDRB,temp
    ldi temp,0xFF      ; Alle Ausgänge auf 1 setzen
    out PORTB,temp

    ldi temp,0xFF      ; PORTD auf Ausgabe setzen
    out DDRD,temp
    ldi temp,0xFF      ; Alle Ausgänge auf 1 setzen
    out PORTD,temp

    ldi ll,0x01        ; Lauflicht = 1
loop:          ; Endlosschleife
    mov temp,ll        ; Untere 8 Bit auf PORT B ausgegeben (invertiert)
    com temp
    out PORTB,temp

    lsl ll        ; Lauflicht um 1 Bit nach links weiterschieben

    cpi ll,0x00    ; Wenn Lauflicht durchgelaufen ist, dann wieder am 
Anfang beginnen
    brne loop_wait

    ldi ll,0x01        ; Lauflicht = 1

loop_wait:
    ldi i,HIGH(2000)      ; Warten
    ldi j,LOW(2000)
    rcall Wait

    rjmp loop

von Mike C. (chaosmike)


Lesenswert?

Hi

.crystal = 4000000
Hab ein Problem bei der Eingabe des Quarzes erscheint immer folgende 
Fehlermeldung in AVR STUDIO
(4): error: Invalid directive: '.crystal'

Und $regfile = "2313def.dat" funktioniert auch nicht.
Könnt ihr mir sagen was da das Problem sein könnte ?

Ich hab da an die Fusebits gedacht .

Danke im voraus

von Thomas Forster (Gast)


Lesenswert?

> $regfile = "2313def.dat"

Richtig heißt es:
.include "2313def.inc"

Stand doch bereits in deinem obigen Code.

von chaosmike (Gast)


Lesenswert?

Ja das wusste ich ja schon aber in fast jedem Code steht es so, da 
dachte ich das würde dann auch funktionieren aber wie gibt man die 
Quarzfrequenz in den At90S2313 ein.
DAnke für die Antwort

von Karl H. (kbuchegg)


Lesenswert?

Mike C. schrieb:
> Hi
>
> .crystal = 4000000
> Hab ein Problem bei der Eingabe des Quarzes erscheint immer folgende
> Fehlermeldung in AVR STUDIO
> (4): error: Invalid directive: '.crystal'
>
> Und $regfile = "2313def.dat" funktioniert auch nicht.
> Könnt ihr mir sagen was da das Problem sein könnte ?

Das eigentliche Hauptproblemn besteht darin, dass du einen BASCOM Thread 
für dein Assembler anliegen gekapert hast.

*************************************************
Es gibt mehr Programmiersprachen als nur eine!
*************************************************

Du willst offenbar in Assembler programmieren. Also schreib auch in 
Assembler. Und wenn du dir Beispiele anderer ansiehst, dann studiere 
hauptsächlich Assembler-Beispiele.

Es ist mit deinem Wissenstand nicht wirklich zielführend, wenn du BASCOM 
Source Code studierst und den 1:1, mit seinen ganzen 
Konfigurationsteilen in Assembler übernehmen möchtest.

Das ist so, wie wenn jemand der Italienisch lernen will, dass mit einem 
Russisch Lehrbuch tun will. -> nicht wirklich zielführend.


> Ja das wusste ich ja schon aber in fast jedem Code steht es so,

Echt?
Ja, wenn man BASCOM Source Code studiert dann ist das wohl so.

> da dachte ich das würde dann auch funktionieren aber wie gibt
> man die Quarzfrequenz in den At90S2313 ein.

Die gibt man gar nicht ein.
Der At90S2313 arbeitet mit der Frequenz für die er gefust ist,  bzw mit 
der Frequenz mit der der Quarz läuft (wenn er auf Quarz gefust ist)


So, und jetzt mach ich den Thread dicht, ehe dieses BASCOM-Assembler 
Fiasko noch weiter geht. Das ist ja schlimmer als die klassischen 
Verwechslungskomödien der 60-er Jahre.
Hätte ich schon längst tun sollen.

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.