Forum: Mikrocontroller und Digitale Elektronik LED Blinklicht mit Attiny2313, blinkt nicht


von Gerdchen (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte ein Blinklicht mit Hochlesitungs-LEDs aufbauen. Dazu habe ich 
eine Schaltung von einem Freund bekommen, bei dem sie auch klappt. 
Allerdings habe ich die Schaltung mit SMD-Bauteilen aufgebaut, so dass 
nicht 100% auszuschließen ist, dass ich Fehler gemacht habe. Den 
Schaltplan habe ich mal angehängt. Den ATTiny2313 habe ich mit 
AvrStudio4 programmiert. Dazu habe ich folgendes eingestellt:

Main:
ATtiny2313 ausgewählt
ISPMode ausgewählt

Programm:
Unter Flash Datei im Hex-Mode geladen

Fuses:
Spien aktiviert
BODLEVEL auf BROWN-OUT Detection 4,3V
SUT-CKSEL auf INt. RCOsc. 8MHz; Start-Up time: 14CK +65ms

Auto:
Erase Device, Check Signature, Programm FLASH, Verfiy FLASH, Program 
Fuses, Verify Fuses aktiviert

Der Programmcode lautet:
// this is the header file that tells the compiler what pins and ports, 
etc.
// are available on this chip.
#include <avr/io.h>
// define what pins the LEDs are connected to.
// in reality, PB3 is really just '3'
#define LED PB3
// Some macros that make the code more readable
#define output_low(port,pin) port &= ~(1<<pin)
#define output_high(port,pin) port |= (1<<pin)
#define set_input(portdir,pin) portdir &= ~(1<<pin)
#define set_output(portdir,pin) portdir |= (1<<pin)
// this is just a program that 'kills time' in a calibrated method
void delay_ms(uint16_t ms) {
uint16_t delay_count = 8000000 / 17500;
volatile uint16_t i;
while (ms != 0) {
for (i=0; i != delay_count; i++);
ms--;
}
}
int main(void) {
// initialize the direction of PORTD #15 to be an output
set_output(DDRB, LED);
while (1) {
// turn on the LED for 25ms
output_high(PORTB, LED);
delay_ms(25);
// now turn off the LED for 500ms
output_low(PORTB, LED);
delay_ms(500);
// turn on the LED for 25ms
output_high(PORTB, LED);
delay_ms(25);
// now turn off the LED for 200ms
output_low(PORTB, LED);
delay_ms(200);
// turn on the LED for 25ms
output_high(PORTB, LED);
delay_ms(25);
// now turn off the LED for 800ms
output_low(PORTB, LED);
delay_ms(800);
// now start over
}
}

Die Programmierung läuft ohne Fehlermeldung durch. Ich gehe also davon 
aus, das Programm wurde erfolgreich auf den ATTiny2313 geschrieben.

Probeweise habe ich die Schaltung an 12V angeschlossen, und eine normale 
2,2V LED mit Vorwiderstand verwendet. Die LED leuchtet extrem schwach 
dauerhaft und wird allmählich heller. Von einem Blinken ist nicht zu 
sehen. Mit dem Oszi müsste ich doch gegen 12V gemessen am PIN 15 (PB3) 
des ATTiny2313 ein Signal erkennen. Da sehe ich nichts, nur eine flache 
Linie. Ich habe den ATTiny2313 schon getauscht, weil ich dache, ich 
hätte ihn ggf. zerstört.

Aus meiner Sicht gibt es drei Fehlerquellen:
- Software: schließe ich im Grunde aus, da das Programm bei einem Freund 
schon läuft
- Programmierung: Schließe ich auch fast aus, da die Programmierung ohne 
Fehlermeldung durchläuft
- Hardware: halte ich für am wahrscheinlichsten, finde aber keinen 
Fehler

Für Tips zur Eingrenzung wäre ich sehr dankbar!!

: Verschoben durch Moderator
von Gerdchen (Gast)


Lesenswert?

Ich hab mich vertippt. Es darf nicht heißen "Mit dem Oszi müsste ich 
doch gegen 12V gemessen am PIN 15 (PB3) des ATTiny2313 ein Signal 
erkennen. ", sondern "Mit dem Oszi müsste ich doch gegen GND gemessen am 
PIN 15 (PB3) des ATTiny2313 ein Signal erkennen."

von Hakim (Gast)


Lesenswert?

> // Some macros that make the code more readable

Die witzigste Zeile in deinem "Code".

von Manuel X. (vophatec)


Lesenswert?

Ich seh keinen Schaltplan. Zumindest keinen den ich auch auf dem 
Smartphone sehen könnte.

Ein Bild davon wäre vielleicht hilfreich ...

von Georg M. (g_m)


Lesenswert?

Gerdchen schrieb:
> Aus meiner Sicht gibt es drei Fehlerquellen:
> - Software: schließe ich im Grunde aus, da das Programm bei einem Freund
> schon läuft
> - Programmierung: Schließe ich auch fast aus, da die Programmierung ohne
> Fehlermeldung durchläuft
> - Hardware: halte ich für am wahrscheinlichsten, finde aber keinen
> Fehler

Ich würde es zuerst mit einem Minimalprogramm prüfen.
1
#define F_CPU 1000000UL
2
#include <avr/io.h>
3
#include <util/delay.h>
4
5
int main(void) {
6
 DDRB |= (1<<PB3);
7
8
 while (1) {
9
  PORTB |= (1<<PB3);
10
  _delay_ms(200);
11
  PORTB &= ~(1<<PB3);
12
  _delay_ms(800);
13
 }
14
}

von Gerdchen (Gast)


Angehängte Dateien:

Lesenswert?

Hatte es als Eagle Datei angehängt. Hier ein Bild.

von Gerdchen (Gast)


Lesenswert?

Falls das noch wichtig ist, diesen ATTiny2313 benutze ich:
https://www.reichelt.de/mcu-attiny-avr-risc-2-kb-20-mhz-so-20-attiny-2313-so-p54968.html?

von Christian M. (Gast)


Lesenswert?

Ich sehe keine LED. Bitte den ganzen Schaltplan!

Gruss Chregu

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Ein Bild deiner Platine wäre ziemlich nützlich, wenn du den Fehler eh 
schon in der Hardware (im HArdware-Aufbau) vermutest.

von Gerdchen (Gast)


Angehängte Dateien:

Lesenswert?

Die LEDs sind am 10-poligen Pfostenstecker angeschlossen. Ich hab jetzt 
ersatzweise mal eine eingezeichnet.

von Gerdchen (Gast)


Angehängte Dateien:

Lesenswert?

Hier ein Bild des Boards

von Karl M. (Gast)


Lesenswert?

Georg M. schrieb:
> #define F_CPU 1000000UL

Bis auf die Angabe dieses Defines im Programm, ist das ein guter erster 
Test.

Denn der TO hat/ will mit 8 MHz seinen Attiny2313 takten.

von Gerdchen (Gast)


Angehängte Dateien:

Lesenswert?

Bessere Auflösung

von Christian M. (Gast)


Lesenswert?

Kommen die 12V von extern? Dein "Schaltplan" ist eine Zumutung!

Gruss Chregu

von Andreas B. (bitverdreher)


Lesenswert?

Falls PTC ein PTC ist und kein Kondensator könnte es helfen, D1 mal 
umzudrehen.
Das mit den Schaltplan malen, üben wir aber nochmal.

von Andreas B. (bitverdreher)


Lesenswert?

Falls PTC ein PTC ist und kein Kondensator könnte es helfen, D1 mal 
umzudrehen.
Ansonsten bleibt die Frage, was das Dioden/PCT Geraffel eigentlich soll?

Das mit den Schaltplan malen, üben wir aber nochmal.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Hast Du schon einmal mit dem Gedanken gespielt anstatt eines P-MOSFETs 
einen N-MOSFET einzubauen? :)

von Andreas B. (bitverdreher)


Lesenswert?

Magnus M. schrieb:
> Hast Du schon einmal mit dem Gedanken gespielt anstatt eines P-MOSFETs
> einen N-MOSFET einzubauen? :)

Warum? Soll er jetzt GND schalten?

von Gerdchen (Gast)


Lesenswert?

OK, sorry bzgl. des Schaltplans. Ich gelobe, das zukünftig zu 
verbessern. Ich bin damit einfach noch nicht so versiert!

Ich habe den Fehler wahrscheinlich gerade gefunden. Ich wollte das 
minimalistische Programm von Georg M. hochladen. Ich erzeuge die hex 
files falsch. Das heißt, mein Programm ist offensichtlich nie auf dem 
ATTiny gelandet. Im Netz finde ich nur Anleitungen, den ARTTIny mit 
Arduino zu programmieren. Ich suche mal weiter nach einer brauchbaren 
Anleitung.

von Georg M. (g_m)


Lesenswert?

Magnus M. schrieb:
> Hast Du schon einmal mit dem Gedanken gespielt anstatt eines P-MOSFETs
> einen N-MOSFET einzubauen? :)

IRLR8726 ist ein N-Channel MOSFET.

von Christian M. (Gast)


Lesenswert?

Symbol ist aber P-Kanal!

Gruss Chregu

von Joachim B. (jar)


Lesenswert?

Georg M. schrieb:
> IRLR8726 ist ein N-Channel MOSFET.

Symbol oder GND Anschluß falsch im Schaltbild, wie soll man da Fehler 
feststellen?

von Andreas B. (bitverdreher)


Lesenswert?

Joachim B. schrieb:
> Symbol oder GND Anschluß falsch im Schaltbild, wie soll man da Fehler
> feststellen?

Gute Frage. Am besten klärt der TO erst mal, was er wie eingebaut hat.

von Holger L. (max5v)


Angehängte Dateien:

Lesenswert?

Ich würde davon ausgehen das der ATTiny nicht mit 8 MHz läuft, sondern 
mit 1 MHz. Das würde darin resultieren das das Timing der delay_ms 
Funktion nicht mehr stimmt.

Das heißt der ckdiv8 fuse ist noch gesetzt.
Du könntet einfach mal die fuse Einstellungen zeigen. (den ausgelesenen 
Hex Code)

Btw. anbei noch die Kompilierte hex-Datei.

: Bearbeitet durch User
von Gerdchen (Gast)


Lesenswert?

Es klappt. Den Attiny habe ich durch Brennen des Bootloades auf 8MHz 
gesetzt. Das hex file richtig mit Arduino kompiliert und nun klappt 
alles bestens.

Danke für eure Hilfe, und sorry, für den schlechten Schaltplan. Ich 
werde ihn überarbeiten!

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Das brauchst Du jetzt nicht mehr. Wenn das Projekt abgeschlossen und die 
.hex Datei fertig ist, kannst Du ihn auch ganz einfach wegschmeißen. ;)

von Andreas B. (bitverdreher)


Lesenswert?

Ben B. schrieb:
> Das brauchst Du jetzt nicht mehr. Wenn das Projekt abgeschlossen und die
> .hex Datei fertig ist, kannst Du ihn auch ganz einfach wegschmeißen. ;)

Kam mir auch so. Normalerweise macht man einen Schaltplan und baut 
danach das funktionierende Gerät.
Erst ein funktionierendes Gerät bauen und dann einen nicht stimmenden 
Schaltplan dazu hinfrickeln ist etwas .... unüblich. ;-)

Trotzdem kann es nicht schaden, einen richtigen Schaltplan zu machen. 
Erstens zur Übung und zweitens für die Dokumentation, damit Du 2 Jahre 
später noch weißt was Du da fabriziert hast.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

In dem Fall würde ich das Projekt aber neu machen. Also komplett neu. 
Wenn es eine Sache ist, bei der man nach zwei Jahren noch wissen muß was 
man wie gebaut hat, hat der aktuelle Ansatz Schwächen, sie sich nicht so 
leicht korrigieren lassen. Für eine Massenproduktion z.B. ist der 
Controller viel zu groß, ein SO-8 Gehäuse hätte auch gereicht.

Für solche Mini-Projekte erstelle ich erst gar keinen Schaltplan. Im 
Quelltext schreibe ich nur eine minimalistische Doku (etwas wenn man 
einen Zeitgeber oder was auch immer irgendwie programmieren kann) und 
wie die Pinbelegung des Controllers ist. Mehr braucht man für sowas 
kleines nicht.

von Holger L. (max5v)


Lesenswert?

Andreas B. schrieb:
> Kam mir auch so. Normalerweise macht man einen Schaltplan und baut
> danach das funktionierende Gerät.
> Erst ein funktionierendes Gerät bauen und dann einen nicht stimmenden
> Schaltplan dazu hinfrickeln ist etwas .... unüblich. ;-)

Naja, ob das im Hobby Bereich so sinnvoll ist. Da gibt es zumeißt keine 
Pflichtenhefte, Teamleiter/Mitglieder und Projektmanager.
Ich mache mir erst Gedaken, baue es auf einem Breadboard auf, schreibe 
Code, tüftele so lange herum bis alles passt und zeichne anschließend 
den Schaltplan.

von Joachim B. (jar)


Lesenswert?

Holger L. schrieb:
> Naja, ob das im Hobby Bereich so sinnvoll ist.

IMHO immer!
Zu leicht trickst man sich sonst selber aus, vergessene Leitung, falsch 
angeschlossen, mit einem Schaltplan, nach dem sauber aufgebaut wird und 
die verlegten Leitungen im Schaltplan nach Prüfung gemarkert werden hat 
man meist mehr Zeitvorteile als stundenlange Fehlersuche.
Sieht man ja hier, worüber wird diskutiert, p-channel statt n-channel, 
GND falsch angeschlossen, falscher FET Typ , eigentlich alles lauter 
Unbekannte über die man nicht mal diskutieren kann, vom fehlenden Aufbau 
ganz zu schweigen (Bild)
Aber jeder wie er mag.

: Bearbeitet durch User
von Andreas B. (bitverdreher)


Lesenswert?

Holger L. schrieb:
> Naja, ob das im Hobby Bereich so sinnvoll ist.

Ja, auch in meinem Hobby arbeite ich systematisch.

von Udo S. (urschmitt)


Lesenswert?

Holger L. schrieb:
> Naja, ob das im Hobby Bereich so sinnvoll ist.

Bevor ich eine Frontplatte bohre, mache ich mir eine technische Skizze. 
Das heisst ich zeichne nicht mit Tusche aber mit Bleistift und 
maßstabsgerecht.

Bevor ich was zuammenbruzzle oder stecke male ich einen Schaltplan.

Sonst muss ich am nächsten Tag schon nachschauen was ich wie 
zusammengesteckt habe.

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.