Forum: Mikrocontroller und Digitale Elektronik ATtiny13 LED ansteuern und einen Timer


von Günter W. (guenter_muc)


Angehängte Dateien:

Lesenswert?

Hallo, wer kann mich denn bei meinem kleinen Projekt mit dem ATtiny 
untersützen? Angehängt habe ich schon mal den Schaltplan. Kann mir 
jemand bitte helfen, ob das soweit funktioniert? Folgendes soll der 
ATtiny machen:
Schalter geschlossen LED 1 an, LED 2 aus
Schallter geöffnet LED 1 aus, LED 1 an.
Der Summer soll bei Signalwechsel am Schalter ca. 3sec. an sein.
Hoffe ich konnte mich verständlich ausdrücken. Bin um jede Hilfe 
dankbar.
Gruß Günter

von Werner (Gast)


Lesenswert?

Ich kenne jetzt die Pin-Belegung des ATtiny nicht auswendig, aber der R2 
kommt mir etwas merkwürdig vor. Die Funktion hängt stark vom Programm 
ab, sollte aber hinzukriegen ein.

von Karl H. (kbuchegg)


Lesenswert?

Wenn du etwas an µC Pins anschliesst, musst du dich immer fragen:
Wieviel Strom zieht denn das Anzuschliessende und wieviel Strom kann 
mein µC Ausgang liefern?

Strom wird immer gezogen! Der Verbraucher bestimmt, wieviel Strom in mA 
er haben will und die Quelle muss liefern können. Kann die Quelle nicht 
liefern, dann ist sie überlastet und geht früher oder später kaputt.

Also: wieviel Strom wird der Summer verbrauchen?
Kann der Tiny den Strom liefern?

Zu den LEDs: was versprichst du dir davon, dass du die Leds 'unten' über 
R2 wieder an den Pin2 zurück führst? Was willst du mit dem Pin2 
programmtechnisch machen, dass dieser Anschluss notwendig wäre?

von Günter W. (guenter_muc)


Angehängte Dateien:

Lesenswert?

Hallo, erst mal danke soweit für die Hilfe. Das mit dem LEDs habe ich 
verstanden und die Schaltung geändert. Nun ist aber PIN2 offen.

Kann ich PIN2 offen lassen?

Das mit dem Summer habe ich auch verstanden, sollte der zuviel ziehen, 
werde ich über einen Transistor anschließen.

Meine Frage ist, würde die Schaltung zu funktionieren?

Danke schon mal.

Gruß Günter

von Vlad T. (vlad_tepesch)


Lesenswert?

warum nur ein widerstand für 2 LEds?
irgendwann willst du sie mal gleichtzeitig anschalten und dann gehts nur 
schnell abwechselnd.
sei nicht so geizig wegen einem R

der summer braucht wahrscheinlich auch noch ein R oder sogar einen 
Transistor, wenn er nicht ein digitaler mit integrierter Elektronik ist.

für den Resetpin nimmt man normalerweise auch einen Widerstand 
(10k-20k).
wernn du deinen Tiny nämlich so programmierst, hast du einen 
kurzschluss, sobald der Programmer die Resetleine zieht.

von Karl H. (kbuchegg)


Lesenswert?

Günter Warth schrieb:
> Hallo, erst mal danke soweit für die Hilfe. Das mit dem LEDs habe ich
> verstanden und die Schaltung geändert. Nun ist aber PIN2 offen.

Ja und.
Macht ja nichts.

> Kann ich PIN2 offen lassen?

Sicher.
>
> Das mit dem Summer habe ich auch verstanden, sollte der zuviel ziehen,
> werde ich über einen Transistor anschließen.

Das solltest du aber jetzt schon wissen. Dort wo du den Summer kaufst, 
steht normlerweise dabei, wieviel Strom er haben will. Alles über 20mA 
ist zuviel.


> Meine Frage ist, würde die Schaltung zu funktionieren?

Na, ja.
An der Schaltung ist ja nichts dran. Die Funktionalität kommt ja erst 
durch das Programm.
Bis auf das Fragezeichen mit dem Summer - die LED sind jedenfalls so 
angeschlossen, dass sie prinzipiell leuchten können.

Eine Frage stellt sich aber doch noch: Wie programmierst du eigentlich 
deinen Tiny? In der Schaltung kannst du ihn nicht programmieren. Dazu 
fehlen die Anschlüsse.

von Günter W. (guenter_muc)


Lesenswert?

Dankeschön.

Tja genau da hast du mich erwischt.

Die Anschlüsse fehlen, ich weiß - sind in der Schaltung nur nicht 
eingezeichnet.

Den Programmer habe ich schon, den tiny kann ich auch schon auslesen 
(ist natürlich leer).

Mein gedanke war erst mal, die Schaltung aufzubauen, so dass sie 
grundsätzlich funktioniert kann. Jetzt kommt die nächste Hürde, das 
Programmieren.

Über eine kleine Hilfe würde ich mich freuen. Ich verwende den 
mySmartUSB 2 AVR Programmer-

Gruß Günter

von Christof Rieger (Gast)


Lesenswert?

Ein Kollege von mir fand das Tutorial toll:

http://www.avr-asm-tutorial.net/avr_de/seminar2/seminar2.html

LG Christof

von Günter W. (guenter_muc)


Lesenswert?

Hallo, na jetzt bin ich schon ein ganz großes Stück weitergekommen. 
Leider hänge ich gerade an dem Timer.
Wer kann mir denn bitte helfen.
Die Schaltung funktioniert soweit, LED1 und LED2 schalten nach 
Flankensteuerung, LED3 soll nun bei jedem Flankenwechsel für eine 
bestimmte Zeit X leuchten.

Hier mein Programm:

; *********************************************************
; * Schalter Ein-LED1-EIN, EIN-LED2-AUS                   *
; *********************************************************
;
.INCLUDE "tn13def.inc"
;
; Schaltbild:
;                   ATMEL ATtiny13
;                     __   ___
;            _    1/   |_|    |8
;+5 Volt O--|___|----|Res    Vcc|----O + 5 Volt
;                    |          |
;                    |PB3    PB2|--|___|--|<|--O + 5 Volt
;                /  3|          |6  _   LED3
;     0 Volt O--O O--|PB4    PB1|--|___|--|<|--O + 5 Volt
;                   4|          |   330   LED1
;        0 Volt O----|Gnd    PB0|--|___|--|<|--O + 5 Volt
;                    |__________|5        LED2
;
; Register Definitionen
;
.DEF rmp = R16 ; Multipurpose register
.DEF rimp = R17 ; Interrupt multipurpose register
;
; Constants
;
;
; Reset- und Interrupt-Vektoren
;
.CSEG ; Assembliere in den Programm-Flash-Speicher
.ORG $0000 ; beginne mit Adresse 0
;
; Sprungvektoren fuer Reset und Interrupts
;
  rjmp main ; Reset vector
  reti ; Int0 interrupt vector
  rjmp intpcint ; PCINT0 vector
  reti ; TC0 overflow vector
  reti ; Eeprom ready vector
  reti ; Analog comparator int vector
  reti ; TC0 CompA vector
  reti ; TC0 CompB vector
  reti ; WDT vector
  reti ; ADC conversion complete vector
;
; PCINT0 Service Routine
;   wird jedes Mal ausgefuehrt, wenn sich der Pegel am
;   Pin 3 (=PB4) aendert
;
intpcint:
  sbic PINB,4 ; Ueberspringe Befehl wenn PB4 Null
  rjmp intpcint1 ; springe weil PB4 = Eins
  cbi PORTB,1 ; schalte LED1 an
  sbi PORTB,0 ; schalte LED2 aus
  reti ; Kehre vom Interrupt zurueck
intpcint1:
  sbi PORTB,1 ; schalte LED1 aus
  cbi PORTB,0 ; schalte LED2 ein
  reti ; Kehre vom Interrupt zurueck
;
; Main program start
;
main:
;
; Stapelzeiger setzen fuer Rueckkehr-Adressen vom Interrupt
;
  ldi rmp,LOW(RAMEND) ; Stapelzeiger auf Ende SRAM
  out SPL,rmp
;
; Angeschlossene Hardware initiieren
;
  sbi DDRB,1 ; LED-Ausgang als Ausgang definieren
  sbi DDRB,0 ; LED-Ausgang als Ausgang definieren
  sbi PORTB,1 ; LED ausschalten
  sbi PORTB,0 ; LED ausschalten
  cbi DDRB,4 ; Taster-Eingang als Eingang definieren
  sbi PORTB,4 ; Internen Pull-Up-Widerstand einschalten
;
; Pin-Change-Interrupt fuer Taste aktivieren
;
  ldi rmp,0b00010000 ; Maskieren der aktiven Eingaenge
  out PCMSK,rmp
  ldi rmp,0b00100000 ; PCINT0-Interrupts ermoeglichen
  out GIMSK,rmp
;
; Interrupts generell einschalten
;
  sei ; Setze Interrupt Flagge
;
; Schlafmodus der CPU einstellen
;
  ldi rmp,0b00100000 ; Schlafen ermoeglichen, Modus Idle
  out MCUCR,rmp
;
; Loop mit Interrupt
;
loop:
  sleep ; Prozessor schlafen legen
  nop ; Tue nichts nach dem Aufwachen
  rjmp loop ; Prozessor wieder schlafen legen
;
; Ende Quellcode
;

von Günter W. (guenter_muc)


Lesenswert?

Entschuldigt, hier das aktuelle Programm:

; *********************************************************
; * Schalter Ein-LED1-EIN, EIN-LED2-AUS                   *
; *********************************************************
;
.INCLUDE "tn13def.inc"
;
; Schaltbild:
;                   ATMEL ATtiny13
;                     __   ___
;            _    1/   |_|    |8
;+5 Volt O--|___|----|Res    Vcc|----O + 5 Volt
;                    |          |
;                    |PB3    PB2|--|___|--|<|--O + 5 Volt
;                /  3|          |6  _   LED3
;     0 Volt O--O O--|PB4    PB1|--|___|--|<|--O + 5 Volt
;                   4|          |   330   LED1
;        0 Volt O----|Gnd    PB0|--|___|--|<|--O + 5 Volt
;                    |__________|5        LED2
;
; Register Definitionen
;
.DEF rmp = R16 ; Multipurpose register
.DEF rimp = R17 ; Interrupt multipurpose register
;
; Constants
;
;
; Reset- und Interrupt-Vektoren
;
.CSEG ; Assembliere in den Programm-Flash-Speicher
.ORG $0000 ; beginne mit Adresse 0
;
; Sprungvektoren fuer Reset und Interrupts
;
  rjmp main ; Reset vector
  reti ; Int0 interrupt vector
  rjmp intpcint ; PCINT0 vector
  reti ; TC0 overflow vector
  reti ; Eeprom ready vector
  reti ; Analog comparator int vector
  reti ; TC0 CompA vector
  reti ; TC0 CompB vector
  reti ; WDT vector
  reti ; ADC conversion complete vector
;
; PCINT0 Service Routine
;   wird jedes Mal ausgefuehrt, wenn sich der Pegel am
;   Pin 3 (=PB4) aendert
;
intpcint:
  sbic PINB,4 ; Ueberspringe Befehl wenn PB4 Null
  rjmp intpcint1 ; springe weil PB4 = Eins
  cbi PORTB,1 ; schalte LED1 an
  sbi PORTB,0 ; schalte LED2 aus
  reti ; Kehre vom Interrupt zurueck
intpcint1:
  sbi PORTB,1 ; schalte LED1 aus
  cbi PORTB,0 ; schalte LED2 ein
  reti ; Kehre vom Interrupt zurueck
;
; Main program start
;
main:
;
; Stapelzeiger setzen fuer Rueckkehr-Adressen vom Interrupt
;
  ldi rmp,LOW(RAMEND) ; Stapelzeiger auf Ende SRAM
  out SPL,rmp
;
; Angeschlossene Hardware initiieren
;
  sbi DDRB,1 ; LED-Ausgang als Ausgang definieren
  sbi DDRB,0 ; LED-Ausgang als Ausgang definieren
  sbi DDRB,2 ; LED3-Ausgang als Ausgang defienieren
  sbi PORTB,1 ; LED ausschalten
  sbi PORTB,0 ; LED ausschalten
  sbi PORTB,2 ; LED ausschalten
  cbi DDRB,4 ; Schalter-Eingang als Eingang definieren
  sbi PORTB,4 ; Internen Pull-Up-Widerstand einschalten
;
; Pin-Change-Interrupt fuer Taste aktivieren
;
  ldi rmp,0b00010000 ; Maskieren der aktiven Eingaenge
  out PCMSK,rmp
  ldi rmp,0b00100000 ; PCINT0-Interrupts ermoeglichen
  out GIMSK,rmp
;
; Interrupts generell einschalten
;
  sei ; Setze Interrupt Flagge
;
; Schlafmodus der CPU einstellen
;
  ldi rmp,0b00100000 ; Schlafen ermoeglichen, Modus Idle
  out MCUCR,rmp
;
; Loop mit Interrupt
;
loop:
  sleep ; Prozessor schlafen legen
  nop ; Tue nichts nach dem Aufwachen
  rjmp loop ; Prozessor wieder schlafen legen
;
; Ende Quellcode
;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.