LED Blinklicht mit Attiny2313, blinkt nicht

Gast #6103812
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!!
Angehängte Dateien:
Gast #6103823
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."
#6103847
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
}
Gast #6103918
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.
#6104102
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.
Angehängte Dateien:
Gast #6104150
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!
#6104849
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.
(Firma: Funkenflug Industries) #6104864
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.
#6105326
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.
#6105335
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.
#6105411
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren