Hallo ich habe einen Helligkeitssensor OPT101 welchen ich mit einem ATTiny85 einlesen will. das Funktioniert auch in der Theorie. Problem sobald es zu dunkel wird, stellt der Attiny seine Arbeit ein. Also ein Blinken der LED auf zeit bzw. Taster Hört ebenfalls auf. Quellcode ist hier zu Finden: https://gitlab.com/attinyplatine/PlatineComplete ich gehe davon aus, das es nur eine Kleinigkeit ist, und mir nur jemand vom Schlauch runterhelfen muss :-D Vielen Dank dafür schonmal
:
Verschoben durch Moderator
Verschieben nach: https://www.mikrocontroller.net/forum/mikrocontroller-elektronik [Mod: erledigt]
:
Bearbeitet durch Moderator
Möglich das die Hauptspannung kutz zusammen stakt und sich der attiny sich daswegen aufhängt ?
Wie kann ich ein Beitrag Verschieben? an die Versorgungsspannung habe ich schon ein Oszi angeschlossen und es bleibt die ganze zeit bei Konstanten 5V
Es könnte ein Fehler im nicht gezeigten Quelltext sein. PB5 ist normalerweise der Reset Eingang. Hast du die Reset-Disable Fuse gesetzt? Aber Achtung: Ohne Reset funktioniert die ISP Schnittstelle nicht mehr, dann brauchst du einen High-Voltage Programmieradapter. PS: Der Schaltpan ist grausam unübersichtlich und die Details der "Messstelle" fehlen.
Ich habe den Quellcode im verlinkten Git. https://gitlab.com/attinyplatine/PlatineComplete die Initialisierung des ADC ist folgende:
1 | //Analog Comparator (vergleich von 2 Spannungen) Ausschaltgen, Verbraucht nur Strom.
|
2 | //ACSR = 1 << ACD;
|
3 | // Pin Konfiguration für den ADC Auswählen.
|
4 | // VCC Als AREF und PB5 als Eingang.
|
5 | //ADMUX = 0x00;
|
6 | ADMUX = (1<<ADLAR); // 8Bit Linksshift mode |
7 | ADCSRB = 0; //FRee Running Mode |
8 | // ADC Control and Status Register A
|
9 | // ADC Einschalten (ADEN), MEssvorgang Starten (ADSC), FreeRUN Aktiviert(ADATE), Teilungsfaktor 64.
|
10 | // es sollte als Takt am ADC ein wert zwischen 50-200 khz anliegen.
|
11 | // bei 8 MHZ und einen Teiler von 64 sind wir bei 125 khz (ADPS...)
|
12 | // bei 16 MHZ und einen Teiler von 128 sind wir bei 125 khz (ADPS...)
|
13 | ADCSRA = (1 << ADEN) | (1<< ADSC) | (1<<ADATE) | (0<<ADPS2) | (1<ADPS1) | (1<ADPS0); //Teiler 8 |
gelesen wird dann einfach mittels:
1 | uint8_t lightGetADCValue(){ |
2 | return ADCH; |
3 | }
|
Das ist viel zu viel Quelltext, um ihn "mal eben" schnell per Sichtkontrolle zu prüfen. Reduziere den Code auf ein minimal knappes Beispiel, wo der Fehler noch auftritt. Wahrscheinlich wird du bei der Schrittweisen Reduktion schon den Fehler finden. Was ist mit PB5, zieht deine Messstellen den Pin runter? Wolltest du ihn als Reset-Eingang oder als I/O Pin nutzen? Wir brauchen den Schaltplan oder detaillierte technische Daten der Messstelle, um abzuschätzen, was sie mit den Leitungen anstellt.
die Sache mit dem Reset war es. Wenn ich das Reset-Disable bit setze Funktioniert es. wie ist das mit den High Voltage Programmern? welcher ist da zu Empfehlen? Haben die irgendwelche Nachteile?
Ich habe für so etwas einen Atmel Dragon verwendet.
Aber ich bin ganz schnell dazu über gegangen, lieber größere
Mikrocontroller zu verwenden, damit ich den Reset Pin und die ISP
Schnittstelle nicht deaktivieren muss.
> Haben die irgendwelche Nachteile?
Du muss den Chip zum Programmieren aus der Schaltung entfernen. Und sie
sind viel empfindlicher, als der unkaputtbare Klassiker Atmel ISP mkII.
Vielen Dank für deine Hilfe.
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.