mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Lichtschranke mit ATtiny13 (AVR)


Autor: Christian G. (stivy)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,
Ich habe bei folgendem Projekt ein Problem:

Zeil:
Ich möchte eine Lichtschranke mit Hilfe eines Mikroprozessorts (speziell 
dem ATtiny13) bauen, um damit später nach Erweiterung einzelne 
Kreuzungen meiner Eisenbahn zu steuern.

Aufbau:
Die Schaltung liegt im Anhang mit einem Foto meines Bau-Versuchs bei.

Problem:
Anfangs funktionierte mein ATtiny13 noch, als ich ihn nach einigen 
Versuchen in meiner Schaltung wieder heraus nahm (Erstes Hochladen des 
Programms hat also geklappt) und neu programmieren wollte, funktionierte 
das nicht mehr. Erst habe ich einfach einen neuen genommen, aber bei dem 
trat das Problem auch auf. Beim Hochladen des Bootloader zeigt das 
Programm noch "ok", beim Hochladen der HEX-Datei zeigt er jedoch direkt 
einen Fehler und anschließend läuft der ATtiny13 nicht mehr.
Meine erste Vermutung war, dass ich irgendwas falsch gepolt habe, 
allerdings finde ich nichts derartiges und das würde mich bei der 
Spannung auch wundern, wenn der dadurch kaputt geht. (Der Eingang ist 
mit Sicherheit richtig gepolt, denn ich habe die Platine synkron zur 
Programmierplatine angeschlossen.)

Weitere Auffälligkeiten:
Der ATtiny hat mit meinem Programm erst dann die LED ausgeschaltet, als 
ich den Eingang mit GND kurzgeschlossen habe.
Sowohl bei ca 0,45V als auch bei ca. 0,05V über dem Vorwiderstand des 
IR-Transistors leuchtete die LED.

Randinformationen:
Programm zum Hochladen des Codes: "LPmikros" aus dem Lernpaket 
"Mikrokontroller" von Franzis
IR-Diode (Lila): 
http://www.conrad.de/ce/de/product/153692/IR-EMITT...
IR-Transistor (Weiß): 
http://www.conrad.de/ce/de/product/153470/IR-RECEI...
Eingangsspannung: 5,02V Gleichstrom

Code:
  .include "tn13def.inc"
  .def  A = r16
  .def  B = r17
  .equ  TXD = 1
  .equ  RXD = 2
  rjmp  Anfang

;Anfang des Programms
Anfang:
  sbi    ddrb, TXD  ;PB1 als Ausgang
  rcall  AdcInit
  ldi    B, 10    ;ca. 0,2V

;Hauptschleife
Schleife:
  ldi    A, 2    ;Kanal2 (PB4) als Eingang
  rcall  RdADC    ;Lesen der Spannung an Kanal [A] in A
  cp    A, B    ;Vergleichen von A und B
  in    A, SREG
  sbrc  A, 0    ;Wenn B>A
  sbi    portb, 1  ;Ausgang einschalten
  in    A, SREG
  sbrs  A, 0    ;Wenn !(B>A)
  cbi    portb, 1  ;Ausgang ausschalten
  rjmp  Schleife

;Setzt die Uhr auf /8 und schaltet sie ein
AdcInit:
  ldi    A, 3
  out    ADCSRA, A
  sbi    ADCSRA, ADEN
  ret

;Liest die Spannung ein
RdADC:
  out    ADMUX, A
  sbi    ADMUX, ADLAR
  sbi    ADCSRA, ADSC
ADrdy: ;Schleife1
  sbic  ADCSRA, ADSC
  rjmp  ADrdy
  sbi    ADCSRA, ADSC
ADrdyb: ;Schleife2
  sbic  ADCSRA, ADSC
  rjmp  ADrdyb
  in    A, ADCH
  ret

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm der Schaltplan sieht anders aus als die aufgebaute Schaltung.

Auffallend ist im Schaltplan als erstes der fehlende Widerstand für die 
rote LED. Und die komische Einbaulage der roten LED: Anode an PB1 und 
Kathode mit Vcc verbunden, wie soll die jemals leuchten?

Andersrum und mit Vorwiderstand würde es Sinn machen als active low 
LED (leuchtet, wenn PB1 LOW ist). PB1 ---###---|<---- Vcc

Oder wenn die LED mit Vorwiderstand gegen GND active high geschaltet 
ist: PB1 ---###--->|---- GND Das passt zu den Kommentaren in deinem 
Programm.

Wie groß ist der Kollektorwiderstand am Fototransitor? Von den Ipce 
Werten im Datenblatt her (>0,25 mA, 3.2mA) wäre ein Widerstand zwischen 
20K und 2K zu überlegen.

1/ Was macht deine Schaltung, wenn der FT komplett abgedunkelt ist? 
Welche Spannung misst du zwischen PB4 und GND? Das sollte fast die volle 
Vcc Pracht sein, weil der FT sperrt und nur ein geringer Dunkelstrom 
fließt.

2/ Was macht deine Schaltung, wenn der FT nicht abgedunkelt ist und 
Umgebungslicht auf den FT fällt? Welche Spannung misst du zwischen PB4 
und GND? Das wird etwas sein, aber nicht so viel wie im nächsten Fall

3/ Was macht deine Schaltung, wenn die IR-Diode (Lila) auf den FT 
leuchtet? Welche Spannung misst du zwischen PB4 und GND? Das sollte fast 
nix sein, der FT sollte bei Beleuchtung optimal leitend sein.

4/ Was macht deine Schaltung, wenn die IR-Diode (Lila) leuchtet, aber 
der Lichtweg auf den FT unterbrochen ist? Welche Spannung misst du 
zwischen PB4 und GND? Das sollte in Richtung von Fall 2/ gehen.

Deine Schwelle B im Programm muss einen Wert zwischen Fall 2/ bzw. 4/ 
und 3/ darstellen. Wenn der Messwert A sehr hohe Werte annimmt, ist Fall 
1/ eingetreten.

Im Programm selbst würde ich noch einen ADCH Wert einlesen:

;Liest die Spannung ein
RdADC:
  out    ADMUX, A
  sbi    ADMUX, ADLAR
  sbi    ADCSRA, ADSC
ADrdy: ;Schleife1
  sbic  ADCSRA, ADSC
  rjmp  ADrdy
  in    A, ADCH ; <<<<<<< Readout der 1. Wandlung
  sbi    ADCSRA, ADSC
ADrdyb: ;Schleife2
  sbic  ADCSRA, ADSC
  rjmp  ADrdyb
  in    A, ADCH ; <<<<<<< Readout der 2. Wandlung
  ret

Autor: Christian G. (stivy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal vielen Danke für die Antwort. :D

Das mit dem Vorwiderstand für die LED hab' ich leider vergessen 
einzuzeichnen. Den habe ich eingebaut, nachdem mir eine LED 
durchgebrannt ist.

Ob ich active Low oder active High habe ist mir vorerst egal, denn das 
kann ich ja in 2 Zeilen in meinem Code ändern.

Mit Kollektorwiderstand war Kollektorstrom gemeint, oder? Ausprobieren 
möchte ich das nicht so gerne, denn mir geht schließlich bisher bei 
jedem Versuch ein Mikroprozessor kaputt.
Die Widerstände haben allerdings alle einen Wert von 1 Kilo-Ohm.

1/ Ausprobieren wie gesagt nicht gerne und komplett abgedunkelt habe ich 
leider nicht. Aber grundsätzlich ... Wenn die IR-Diode auf den 
IR-Transistor scheint, dann hat der Vorwiderstand des IR-Transistors wie 
oben genannt ca. 0,5V und wenn nicht beschienen weniger als 0,1V. Da der 
ATtiny mit Vcc -> PB4 dazu parallel liegt müsste demnach dort die 
gleiche Spannung und über PB4 -> GND 5,02V minus die jeweilige Spannung 
anliegen, oder irre ich mich da?

2/ s. 1/

3/ s. 1/

4/ Ja, die Fälle 4 und 2 sind gleich. Da bin ich mir sicher, da es mir 
ein Mal passiert ist, dass die IR-Diode leicht krumm stand und ich das 
Andere ausprobiert habe.

Da ich ja 0,2V eingestellt habe, liegt dieser somit zwischen 0,1V und 
0,5V.

Den Code zum Einlesen (RdADC) sowie AdcInit habe ich aus einem Beispiel 
aus dem Buch entnommen, deshalb ist der auch nicht weiter kommentiert. 
Sollte also eig. so funktionieren.

Wenn ich weiß, wieso meine ATtinis immer nicht mehr beschrieben werden 
können, kann ich auch weiter probieren. Das Problem ist halt eben, dass 
ich nicht weiß, wieso das immer passiert. Ich habe nicht iwo eine zu 
hohe Spannung oder einen zu hohen Strom anliegen oder so, oder???

Autor: MarioT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn das Programm hochgeladen wird, darf der Reset aber nicht auf Masse.

Autor: Christian G. (stivy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hatte ich auch nicht.

Aber trotzdem danke.

Autor: MarioT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wenn Du Dein Programm drauf spielst zeigt er Fehler?
Hast Du mal probiert, den Bootloader (mit Reset an Masse) neu 
draufzuspielen?

Autor: Christian G. (stivy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, habe ich.
Bei dem Ersten Prozessor will auch das nicht mehr, beim 2. geht es noch 
(laut Meldung -> "ok").
Der Erste kann aber auch einige andere Fehler aufweisen, da ich ihn 
nicht immer ganz richtig angeschlossen habe.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.