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
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."
> // Some macros that make the code more readable
Die witzigste Zeile in deinem "Code".
Ich seh keinen Schaltplan. Zumindest keinen den ich auch auf dem Smartphone sehen könnte. Ein Bild davon wäre vielleicht hilfreich ...
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 | }
|
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?
Ein Bild deiner Platine wäre ziemlich nützlich, wenn du den Fehler eh schon in der Hardware (im HArdware-Aufbau) vermutest.
Die LEDs sind am 10-poligen Pfostenstecker angeschlossen. Ich hab jetzt ersatzweise mal eine eingezeichnet.
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.
Kommen die 12V von extern? Dein "Schaltplan" ist eine Zumutung! Gruss Chregu
Falls PTC ein PTC ist und kein Kondensator könnte es helfen, D1 mal umzudrehen. Das mit den Schaltplan malen, üben wir aber nochmal.
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.
Hast Du schon einmal mit dem Gedanken gespielt anstatt eines P-MOSFETs einen N-MOSFET einzubauen? :)
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.
Georg M. schrieb: > IRLR8726 ist ein N-Channel MOSFET. Symbol oder GND Anschluß falsch im Schaltbild, wie soll man da Fehler feststellen?
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.
:
Bearbeitet durch User
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!
Das brauchst Du jetzt nicht mehr. Wenn das Projekt abgeschlossen und die .hex Datei fertig ist, kannst Du ihn auch ganz einfach wegschmeißen. ;)
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.
:
Bearbeitet durch User
Holger L. schrieb: > Naja, ob das im Hobby Bereich so sinnvoll ist. Ja, auch in meinem Hobby arbeite ich systematisch.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.