C Kleine Tischlampe bitte um Hilfestellung.

Danke für deine Hilfe.

Ich habe das so geändert und jetzt geht nicht mal mehr die LED an wenn ich den Taster drücke :confused:
Ändere ich es wieder zurück funktioniert es wieder mit dem Taster.

Was mache ich falsch ?
 
Ach die Abfrage des Portpinstatus muss noch geändert werden, "invertiert". Mach mal bei der Definition bei der led das Ausrufezeichen weg.
 
Hallo Dirk,

meinst du diese Zeile hier ?

#define LED_IS_ON (!(LEDPORT & (1<<LED)))

Ich habe das ! gelöscht.
Trotzdem funktioniert es nicht.
 
Ich schaue mir es später an, habe gerade keine Zeit. Kannst du vielleicht das aktuelle Programm hier noch einmal reinstellen, falls irgendetwas geändert ist.
 
Und wahrscheinlich macht auch ein konkreter Schaltplan Sinn (bevor's zu weiteren Unklarheiten kommt...
 
Hi Nicole,

Ich habe das so geändert und jetzt geht nicht mal mehr die LED an wenn ich den Taster drücke :confused:
Ändere ich es wieder zurück funktioniert es wieder mit dem Taster.

Was mache ich falsch ?

du hast nicht zufällig einen Pol der LED nur von GND auf Vcc umgesteckt? Normalerweise muß die LED dabei auch umgepolt werden sonst ist sie nämlich in Sperrrichtung und leuchtet natürlich überhaupt nicht. ( Ist jetzt nur so ne blöde Idee :rolleyes: )

Gruß
Dino
 
Danke für eure Antworten.

Ich habe den Fehler gefunden ;)
Ja es war mein Fehler ( Entschuldigung )

Habe ein paar Sachen im Code geändert bzw getestet.
Leider habe ich auch vergessen das ! zu löschen.

Somit hat es nicht funktioniert.
Weger diesem kleinen Zeichen :stupid:

Nein ich weiß bzw ich habe es selber gemerkt, dass es leider nicht so ganz einfach ist wie man denkt.
Ich bewundere wirklich solche Menschen wie Ihr die einfach so aus dem Kopf raus mehrere Seiten Code schreiben und der auch noch funktioniert.

Wirklich Hut ab :trytofly:

Ich werde mir jetzt ein Buch kaufen und langsam Anfangen.

Wenn ich die Zeit vom Timer ändern möchte muss ich einfach nur diese Zeile verändern richtig ?

[CCODE]// LED einschalten und Timer aktivieren
cli();
MeinTimer = 12000; // 2 Minuten = 120 Sekunnden = 12000 x 10ms
LED_ON[/CCODE]


z.B. 18000 wären dan 180 Sekunden sind 3 Minuten.
Habe ich das soweit richtig verstanden ?


Nochmals vielen Dank an alle die mir geholfen haben.
 
Hi Nicole,

Nein ich weiß bzw ich habe es selber gemerkt, dass es leider nicht so ganz einfach ist wie man denkt.
Ich bewundere wirklich solche Menschen wie Ihr die einfach so aus dem Kopf raus mehrere Seiten Code schreiben und der auch noch funktioniert.

doch. Es ist so einfach. Es ist reines logisches Denken und die Zerlegung einer Aufgabe in kleine Teile. Nicht mehr und nicht weniger. Die CPU macht genau das was man ihr sagt.

Aufgabe: Ein Butterbrot schmieren.
Zur Verfügung stehende Sachen: Butter, Brotscheibe, Messer, Frühstücksbrett
Das Programm:
- Programmanfang
- Positioniere die Butter auf dem Tisch
- Positioniere die Brotscheibe auf dem Frühstücksbrett
- Nimm das Messer
- Schleifenstart
--- {
--- Führe das Messer zur Butter
--- schneide ein Stück Butter ab
--- Führe das Messer zum Brot
--- Streiche von rechts nach links über das Brot
--- }
- Schleifendurchlauf bis das Brot mit Butter bedeckt ist
- Programmende

Wie du siehst. Eine Aufgabe in kleine Teile zerlegen die man mit den zur Verfügung stehenden Werkzeugen lösen kann. Was ist da kompliziert dran? Das größte Problem haben die Einsteiger eigentlich immer in der logischen Denkweise und dem Zerlegen der Aufgabe. Wenn das geschafft ist, dann ist der Rest sehr einfach.

Du hast am Anfang eine Initialisierung, dann kommt die Hauptschleife und dann das Ende. Wenn mitten im Butterbrotschmieren das Telefon bimmelt und du gehst dran, dann hast du sogar noch nen Interrupt mit InterruptServiceRoutine (telefonieren). Danach gehts dann an der ursprünglich verlassenen Stelle weiter.

Gruß
Dino
 
Ja, ich hatte die Rechnung ja in #32 Nachvollzogen. Der Timer generiert alle 10ms (100Hz) einen Interrupt, in dem wird das Bit "Flag_10ms" (Bit0) in der 8Bit-Variable "TimerFlags" gesetzt (also jedesmal).und der Software-Zähler (die 12000) dekrementiert wird bis er 0 erreicht(dann wird angeschaltet). Dieses Flag ist ein Merker, ein Fähnchen, ein Knoten im Taschentuch.
Im Hauptprogramm wird bei jedem Schleifendurchlauf (zichtausendmal pro Sekunde) geprüft, ob dieser Knoten im Taschentuch ist.
Ist das der Fall (alle 10ms), wird der Knoten aufgedröselt, anschliessend der Taster ausgewertet (und entsprechend die LED abgeschaltet (und der Zähler auf 0 gesetzt), oder die LED angeschaltet und der Zähler auf 12000 gesetzt).
Nach 12000 ISR's ( also 12000 Hundertstel-Sekunden=120s) wird das Timeout dann wirksam.
Konsequenterweise könnte man die 12000 also auch oben bei den definierten Variablen mitaufnehmen (zB als [CCODE]#define led_timeout 12000 //timeout in centisecounds[/CCODE]und dann unten im else-Zweig diese Compilervariable nutzen.
P.S.: von C hab ich keine Ahnung, folglich keine Garantie für die Syntax und so...
"Interrupts sind wie telefonklingeln beim butterbrotschmieren"...
Sowas (treffendes) kann nur von Dino kommen...:D
(Und der Assemblerprogrammierer muß im Interrupt sauber mit dem Stack umgehen, daß er dann "aus dem Interrupt zurück" nicht plötzlich 'ne Gabel statt dem Messer in der Hand hat:p)
 
Vielen Dank für die guten Beispiele bzw Erklärungen.

Was mir noch eingefallen ist.

Ich möchte die Tischlampe mit einer 3 Volt Knopfzelle betreiben.
Bei 3 Volt benötige ich den Spannungswandler nicht mehr richtig ?
Das der Attiny ja ohne Probleme mit den 3 Volt arbeiten kann.

Was benötige ich zum Problemlosen Betrieb meiner Schaltung auser meinen bereits verbauten Sachen ?
Einen Kondensator oder der gleichen benötigt der Attiny bei dieser aufgabe ja noch nicht ?

Vielen Dank an alle.
 
Der Tiny13 (ohne V) läuft laut Datenblatt garantiert ab 2,7V, allerdings nicht überall mit maximaler Frequenz. die 9,6MHz sind aber drin.
(das Datenblatt des Tiny13A hab ich grad nicht vor der Nase).
Wahrscheinlich wird das ganze so (mit der Knopfzelle) auch ohne Pufferkondensator laufen (hängt ja sonst nichts weiter dran), ich würde aber trotzdem den obligatorischen 100nF-Kerko zum Puffern der Spannungsversorgung dazunehmen (Prellen des Tasters). Den Reset kannst Du offenlassen (wenn da nicht'ne lange Leitung dran ist - im Zweifelsfall geht die Led dann halt aus.)
 
Der Tiny schafft das, aber an der LED wirst du fix n Einbruch der Helligkeit merken (bei weißen) je leerer die Knopfzelle wird. Außerdem ist es jetzt auch noch Pflicht das PRR Register zu setzen, Sleep Mode etc, dass der Controller so wenig Strom wie möglich zieht. Und den Taster am Besten am (Hardware)Interrupt Pin (beim t13 ist das INT0, also PB1). Sleep Mode nicht zu vergessen. Aber da muss wer ran der C kann.

Ich hab hier n ATtiny13 an einem 350mAh LiPo Akku dran wo ich ausversehen vergessen hab debugWire zu deaktivieren (CPU wird ständig mit Takt versorgt). Der ist nach spätestens 6 Tagen so weit leer gelutscht dass selbst der Tiny nix mehr macht. Ohne Benutzung. So eine Knopfzelle wäre ein vielfaches schneller leer.

Ich wunder mich auch, warum Knopfzelle? Ist doch auf Dauer sehr teuer. Warum nicht z. B. irgend einen Handy Akku? Die kann man wenigstens wieder aufladen :)


p. S.: @Dino: klasse Beispiel :D
 
Danke für die Info.

Das wäre das nächste was ich Fragen wollte.
Wie lange die Batterie hält wenn der Attiny13 im Sleep Mode ist?

An einen kleinen Akku habe ich auch schon gedacht.
Vielleicht sogar mit USB Anschluss zum wiederaufladen.

Die Ideen wären ja da.
Aber das Umsetzen ist was anderes :rolleyes:

Setzt man das mit dem Sleep Modus im Code oder im Controller?
 
Wurde was über die Farbe gesagt?

Ansonsten schreit das Problem ja förmlich nach 'nem Tiny43U...
(und die Verwendung des von Dir angemaulten Watchdog-Timers hilft auch beim Stromsparen (wenn schon irgendwas 2 Minuten runterzählen muß)
Edit: am Stromverbrauch kann man natürlich noch einiges optimieren, auch in der Hardware.
Der Sleepmode wird im Programm konfiguriert und ausgelöst, dabei muß man natürlich auch beachten, wie man den Prinzen dann wieder zum Dornröschen bringen kann...
Edit2: in Verbindung mit dem 43U nehm ich mir grad nach Weihnachten angesichts der vielen anfallenden halbleeren AAs und AAAs irgendwas vor.
Allerdings hab ich jetzt diesbezüglich auch'n Aufwärts-Schaltregler-IC auf'm Schirm, der mit 0,3V Eingangsspannung auskommen soll...
 
Mit Akku würde ich es so machen dass du dir mal den MAX1811 anschaust (unter 3€). 2 Kondensatoren dazu, USB Kabel dran (oder Buchse, kannst du ja selbst entscheiden), fertig. Es gibt auch sehr gute Platinen aus fern Ost die komplett fertig sind. Naja da stört denn die Lieferzeit vielleicht. In der Bucht mal nach "TP4056" suchen und mit etwas Glück schon ab 1€ schießen. Die nutz ich hier selber täglich, sind sogar besser als der MAX (welcher nie aufhört zu laden und mir deswegen schon 2 Akkus geschrottet hat). :)

Akkus sollte ja kein Problem sein. Irgendwer hat immer noch ein altes oder defektes Handy zu liegen. Soll es sehr klein sein könnte man sich mal diese Discounter Teile von den elektrischen Zigaretten besorgen (rate ich eigentlich von ab weil die nix taugen, aber die Akkus sind mit 7,3mmØ * 30mm Länge schön klein und lassen sich somit gut zweckentfremden)

Kurz um: Mit Akku 0 Problem. Nur 1 IC mehr + n bissl Vogelfutter :)
Denn hast du auch 3,7V (4,2 bei randvollem Akku) also etwas mehr Spielraum, auch für die LED.


---

@LotadaC: PR4404? Ok, der hat Minimum 1V laut Datenblatt. Hatt ich hier schon mal in Verwendung.
 
...
@LotadaC: PR4404? Ok, der hat Minimum 1V laut Datenblatt. Hatt ich hier schon mal in Verwendung.
bezieht sich das jetzt auf irgendwas von mir?
Das ist ein Stepup von Prema, AFAIK für eine LED (mehrere in Reihe) gedacht. Die weiteren Daten hab ich (natürlich) nicht im Kopf - bin ja nicht Dino...
Wie Du sagst, scheint der ab mindestens 1V zu arbeiten
Der Tiny43U besitzt einen integrierten Stepup, der ab 0,7V arbeiten soll.
Der Stepup den ich auf dem Schirm hab kann ab 0,3V arbeiten - allerdings hab ich da noch nichts konkretes realisiert (käme dann natürlich hier im Forum was)...
 
Die Farben sind Weiß und Gelb.

Das man für den Akku sozusagen noch ein Gerät benötigt das die Ladung regelt habe ich ganz vergessen.
Kann man ca. sagen wie lange der Akku halten wird nur wenn das Gerät im Sleep Modus ist ?

Wäre es vielleicht auch möglich den jetzigen Mini Schalter zu nutzen?

Das heißt mini Schalter von Off auf On und gleich wieder auf Off.
Weil der Schalter kurz auf On stand bekommt der Attiny bzw die LED 2 Minuten Strom und dan geht es automatisch aus.

Würde das vielleicht funktionieren ?
Somit wäre der Attiny nicht dauernd im Standby Modus.
 
Wie Du sagst, scheint der ab mindestens 1V zu arbeiten
Der Tiny43U besitzt einen integrierten Stepup, der ab 0,7V arbeiten soll.
Richtig. Bei mir hat ers aber noch bis fast 0,5V getan. Wusste ja nicht was du vor hast, und da es hier um LEDs geht... :)
Den 43 kenn ich noch nicht. Mal checken. Aber morgen - ääähm heute - :)

BTT. Naja, so einen Akku kannst du selbstverständlich direkt verwenden. Ist ja im Endeffekt nur eine Batterie. Sprich für die reine Verwendung brauchst du kein einziges Bauteil mehr. Das was ich meinte war nur die Ladeelektronik. So ein Ding wird schließlich irgendwann auch mal leer. Knopfzellen musst du neu kaufen, Akkus kannst du laden. Und ein so kleinen IC kann man meißt noch überall reinquetschen :)

Wie lange so eine Batterie / Akku hält hängt stark vom Verbrauch ab. Ähnlich wie beim Handy. Telefonierst du viel ist der Akku vielleicht schon nach 12 Stunden leer, wenn wenig dann hält der vielleicht ne Woche. Dann kommt es auch noch drauf an wie viel Strom gezogen wird. Vermutlich gibt es kluge Köpfe die das ausrechnen könnten (dafür müsste aber der Strom bekannt sein den die LED zieht sowie die Akku Kapazität), ich würde es eher ausprobieren. Aber ein AVR im Tiefschlaf frisst nur ein paar µA, also fast nicht erwähnenswert.
 
Kann man ca. sagen wie lange der Akku halten wird nur wenn das Gerät im Sleep Modus ist ?

Der Tiny13 verbraucht im Sleep-Mode weniger als 1mA. Das können auch nur einige µA sein - das hängt sehr stark von den Einstellungen ab (siehe Kapitel 7 im Datenblatt). Ansonsten wird die Akkulaufzeit natürlich auch vom Akku bestimmt (Kapazität und ggf. die Selbstentladung).

Gruß
Pirx
 
entscheidend ist das Verhältnis zwischen LED an und LED aus.
Die LED nimmt mit angenommenen 20mA deutlich mehr Strom auf, als der Tn13, selbst wenn er mit vollem Takt und so läuft. Interessant ist in dem Zusammenhang Kapitel 19 im Datenblatt.
Quintessenz:
  • je geringer die Versorgungsspannung, desto geringer die Stromaufnahme (aber da hast Du mit der LED Grenzen)
  • je geringer die Taktfrequenz, desto geringer die Stromaufnahme
  • das meiste bringt jedoch der Sleepmode (insbesondere der PowerDown)
Daß der Controller durch den langsameren Takt langsamer arbeitet ist hier nicht relevant, da Du so oder so bis zu 2 Min warten willst, also sollte der Takt möglichst weit runter.
Da Du Dich auf'ne interne Taktquelle beschränken willst, stehen 3 Oszillatoren zur Auswahl: 9,6MHz, 4,8MHz und 128kHz (Watchdog). Vom Stromverbrauch her gilt 9,6MHz > 4,8MHz > 128kHz, ABER:
Wenn der Watchdog(oszillator) enabled ist, läuft der in allen Sleepmodes (und nimmt da Strom) - Deine Anwendung wird aber sicher die allermeiste Zeit im PowerDown verweilen. Die anderen Oszillatoren werden da hingegen gestoppt. Also wäre hier der 4,8er Oszillator der Wahl, zur Laufzeit dann mit möglichst großem MainClockPrescaler.
Also 4,8MHz/256=18,75kHz Systemtakt. Aufgrund des geringeren Systemtaktes ergeben sich natürlich für den 10ms-Software-Timer andere Werte:
Timer-Prescaler auf 1 und 186 als Compare Match Value für den CTC sollten passen.
Sleepmodus dann auf PowerDown, aktiviert werden sollte er beim Abschalten der LED.
Zum Aufwecken muß ein Interrupt am Pin mit dem Taster herangezogen werden (obs dann sinnvoller ist, die Tasterabfrage auch in einen IRQ zu packen, hab ich jetzt nicht durchdacht. Wegen Tastenprellen wohl eher nicht).

Erwähnenswert ist übrigens noch, daß der Tiny13A als picopower-Controller nochmal weniger Strom nehmen sollte als der 13-ohne-A.

Und nochwas zu Akkus: wenn Akkus verwendet werden, muß das ganze natürlich gegen Tiefentladung geschützt sein, insbesondere erübrigen sich dann StepUps mit 0,3V..0,5V (damit kannste halt Primärbatterien leerlutschen lassen).
Für Akkus gibt es AFAIK Lade (und Entlade)-ICs, die das berücksichtigen, aber da weiß Thomas vielleicht mehr.

Der Tiny43U kann die Batteriespannung übrigens messen, und bei einstellbaren Grenzen seinen Boost-Converter (und sich selbst) abschalten (wenn ich das richtig in Erinnerung hab).
Am Rande ist natürlich zu erwähnen, daß es auch ohne Mikrocontroller diverse selbst-regelnde boost-Schaltungen gibt, mit denen man LEDs aus einer quasi-leeren Batterie speisen kann (Burkhardt Kainka hat da was mit'em astabilen Multivibrator oder so auf seiner Seite). Allerdings wäre für das Timeout und den Taster noch Hirnschmalz zu investieren...
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)