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!!
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."
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.
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.
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.
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?
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.
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.
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.
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.
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!
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.
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.
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.
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.
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.