Gefunden für attiny2313 timer programmieren - Zum Elektronik Forum |
1 - PWM mit Attiny2313 will nicht so ganz -- PWM mit Attiny2313 will nicht so ganz | |||
| |||
2 - 10 Relais per Funk ansteuern -- 10 Relais per Funk ansteuern | |||
Bei einem Meter und freier Sicht auf den Empfänger würde ich ja IR nehmen, das ist billig, unkritisch und es gibt unendlich viele fertige Fernbedienungen.
Die haben zwar alle keine genau Null Milliampere Standbyverbrauch, aber knapp darüber ![]() Voraussetzung ist, dass du weißt, wie man einen µC programmiert. Nimmt man den RC5-Kode als Grundlage, bei dem ca. alle 64 Millisekunden ein Datagramm geschickt wird, kann man in der Tat sowas wie eine Dauerdruck-Auswertung realisieren. Dazu muss man bloß einen Timer mit einer geringfügig höheren Periodendauer laufen lassen - sobald keine Datagramme mehr kommen, schaltet man den angeschalteten IO-Pin wieder ab. µC: ATmega8 oder ATtiny2313 Empfänger: TSOP1136 Dekoderprogramm: kann ich dir schicken Fernbedienung: RC5-fähig Edit: @Peter „Besser wäre hier Halbleiter zu verwenden!“ Hängt allerdings auch von den Signalen ab. Wenn es z.B. Audiosignale sind, kann es einfacher sein, Signalrelais zu nehmen. Je nach Bedingungen (Frequenz, keine galv. Trennung, max. Amplitude und Offset, etc.) könnte man auch Analogmultiplexer nehmen... [ Diese Nachricht w... | |||
3 - Temperatursensor, weitere Schaltungen über RS232 -- Temperatursensor, weitere Schaltungen über RS232 | |||
Hallo zusammen,
hier wie besprochen, der Code für den Temp-Sensor, ist momentan noch für den Attiny2313 konfiguriert. Hinweise auf die Quelle habe ich leider nicht mehr gefunden, kann auch gut sein, dass ich das selbst nach Datenblatt herunterprogrammiert habe. Sooo besonders spannend ist der Code auch nicht. Hinweise: * die Software geht davon aus, dass nur ein Sensor am Bus hängt, es werden keine einzelnen Sensoren adressiert. Irgendwo hätte ich aber noch die Routinen für Multi-Slave. * es werden die Ports B0 = GND, B1 = DATA und B2 = Vcc konfiguriert. Wenn der Atmega32 gesteckt ist, kann man den Sensor in den ansonsten ungenutzten Sockel IC3 ( Attiny2313 ) Pin 12(Gnd) ,13(Data) ,14(Vcc) stecken. * Prozessor mit Ponyprog auf 8MHz fusen * COM auf 19k2 einstellen * die Timer-Register könnten beim Mega32 leicht anders heissen. Das Programm ist momentan so gepatched, dass ständig Messungen getriggert werden ( Kommando "S" wird simuliert ). Zum Teil sind noch Kommentare und auskommentierter Code aus anderen Projekten enthalten, bitte einfach ignorieren. Ich wollte da jetzt nicht lange dran rumeditieren. Gruß Stefan | |||
4 - Frequenzgenerator 0.5Hz - 4.2khz Ua=5V -- Frequenzgenerator 0.5Hz - 4.2khz Ua=5V | |||
Zitat : Esko hat am 31 Mai 2007 17:09 geschrieben : Achsooo es geht nicht ums erzeugen des Signals sondern ums einlesen. Das ganze wäre doch billiger (und volldigital) über einen Inkrementalgeber und eine Anzeige realisiert. Zitat : Der Timerausgang kann bis zu 16Bit Auflösung haben, das sind sicher genug. Der OP will doch nur ein Rechtecksignal. Dafür ist die Auflösung doch wurscht. Ähm ... billiger als ca. 3 Euro? (1.50 für ATtiny2313 und ca. 1.50 für Poti) Die 16 Bit sind der max. Zählerumfang (=Teilerverhältnis) für den Timer... ... | |||
5 - Idle und Sleep -- Idle und Sleep | |||
Dein Code sieht so aus, als ob's BASCOM wäre (da bin ich nicht der Profi). Aber es gibt eine Konstante, die sich "Timervorgabe" nennt... ich vermute, dass damit die Dauer der Zeit zwischen den Interrupts bestimmt wird. Diesen Wert müsste man erhöhen, damit nicht so oft der Interrupt ausgelöst wird.
Logischerweise muss man dann aber auch den Sekundenzähler nicht um 1 erhöhen, sondern um den angepassten wert, also z.B.: um 2, wenn durch die (neue) Konstante eine Zeit von 2 Sek. zwischen den Interrupts bestimmt. Weiter oben wurde schon erwähnt, dass durch Betrieb mit einem "niederfrequenten" Quarz der Stromverbrauch ebenfalls drastisch reduziert wird, was aber auch eine Anpassung der Konstanten für den Timer impliziert - möglicherweise kannst Du dann die Sekunden ganz vergessen und einen Minuten - Timer aufbauen - 59 mal weniger Interrupts, aber auch die Reaktionszeit auf Ausfall wird entsprechend schlechter! Nebenbei bemerkt: Der ATtiny2313 hat Pins, welche einen Interrupt auslösen können, wenn sich an Ihnen der Pegel ändert ... wäre das nicht eine Möglichkeit die Netz/Batt Umschaltung zu realisieren? ... | |||
6 - 3 x PWM in Bascom -- 3 x PWM in Bascom | |||
Du hast dich verlesen, der AtTiny2313 hat vier (4) PWM-Kanäle, verteilt auf zwei Timer. Anschlüsse sind PD5 und PB2,3,4.
Wie du aber auf "Timer0 oder Timer2" kommst, ![]() Ich hab den Dingern zwar bisher nur Schritt für Schritt gesagt was sie tun sollen (kurz Assembler), aber bei mir hießen die beiden vorhandenen immer Timer0 und Timer1. Was soll der Chip denn sonst noch machen. Wenn es mehrere RGB-Kanäle werden sollen und der Controller praktisch nichts anderes machen soll, kann man den PWM-Generator auch Softwaretechnisch emulieren. ... | |||
7 - Mehrere Interrupts in \'C\' mit WINAVR bearbeiten -- Mehrere Interrupts in \'C\' mit WINAVR bearbeiten | |||
Hi,
inzwischen hab' ich schon einige einfache Problemchen mit dem ATtiny2313 in 'C' gelöst. Jetzt stehe ich aber vor folgendem (vereinfachten) Problem: 1) Lichtschranke soll eine Stopuhr steuern. 2) LCD (4*16 / 4*20) soll diverse Zeiten anzeigen Punkt 2 ist schon fertig, für Punkt 1 benötige ich jedoch 2 Interrupts: 1. Timer (läuft schon mit 1/100 sec Auflösung) 2. Interrupt bei Änderung des Signalpegels an einem Eingang. Konkrete Fragestellung: in meiner Interrupt - Routine des Timers (s.u.) sei(); // Globalen Interrupt freigeben TIMSK =_BV(OCIE1A); // Vergleichswertüberlauf Interrupt einschalten TCCR1B = _BV(CS10); // Vorteiler = 1 OCR1A = tim_cnt; // Zeit einschreiben wird mittels "sei();" der Irq global freigegeben. Wie muss dan meine Routine für den Pin-change Interrupt (generell) aussehen? Mein Ansatz sieht so aus, aber klappt das? SIGNAL(SIG_PCINT) { // Daten einlesen INPMASK = 0x10 für PORTB.4 sigi = inp(PINB) & INPMASK; if (sigi != INPMASK) { // fallende Flanke } else { // steigende Flanke } } ... und wie sieht die notwendige Initialisierung dann aus? Kann mir jemand... | |||
8 - Interrupts in \"C\" bei Atmel -- Interrupts in \C\ bei Atmel | |||
Zuerst die gute Nachricht:
Meine ersten Schritte mit den Atmels (Attiny2313) waren schon erfolgreich, hab' auch schon etwas programmiert und es funkt! AAAAABER: Total unproffessionell in einer langen Schleife als main().... Das muss besser werden! ![]() Eine der grundlegenden Funktionen sind Beispielsweise viel besser in einem zyklischen Interrupt aufgehoben ... (Ausgabe von PWM - Signalen). Und jetzt klemmts: (Oder bin ich einfach zu doof???) Ich hab's noch nicht kapiert, wie ich mit WINAVR einen Interrupt in "C" programmiere. Eigentlich sind 2 Probleme zu lösen: a) Timerprogrammierung (init) b) Zyklischen Interrupt durch Timer bearbeiten. Gibt's ein möglichst einfaches "howto" im Netz, welches mir weiterhilft? ... oder hat jemand von Euch einen Tip? Wahrscheinlich fehlt nur ein kleiner Schubs, um mein Verständniss dafür in die richtige Rille zu bringen... ... |
Zum Ersatzteileshop Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation! gerechnet auf die letzten 30 Tage haben wir 13 Beiträge im Durchschnitt pro Tag heute wurden bisher 30 Beiträge verfasst 4 Besucher in den letzten 60 Sekunden alle 15.00 Sekunden ein neuer Besucher ---- logout ----su ---- logout ---- |