Hallo an alle, ich bekomme bei meinem MEGA 8 leider den Timer nicht zum laufen. Wollte nur ein wenig damit rumspielen. Er soll einfach hochzählen und wenn er einen bestimmten Wert erreicht hat, soll auf PORTB 0xFF ausgegeben werden. Habe das ganze in etwa so gemacht: ---- .include "4433def.inc" ldi r16,0xFF out DDRB, r16 ldi r16, 0b00000011 out TCCR0, r16 ldi r16, 0b00001111 loop: ldi r17, TCNT0 cp r16,r17 ldi r17, 0b00000000 out portb, r17 rjmp loop test: ldi r17, 0b11111111 out portb, r17 --- Später möchte ich auf externen Clock umstellen und damit Frequenzen messen (nur bis ca 5 kHz!) .. Wie muss ich dort dann die ISR definieren? Danke schonmal im voraus! Manu
sofern ich dein Code-Fragment richtig interpretiere gibt dein Programm ununterbrochen 0x00 auf Port B aus, nach dem compare müsstest du das Z-Flag befragen. grüsse leo9
Hallo "Gott des Krieges" g, zunächst mal würde ich dem Assembler mitteilen, dass es sich um einen Mega8 handelt. Also: .include "m8def.inc" anstatt .include "4433def.inc" Das Datenrichtungsregister ist noch ok - aber dann kann ich dir nicht mehr folgen. Schau doch mal ins Datenblatt zum Mega8 in die Sektion "Timer ..." Hier meine 10 Punkte, welche zu einem laufenden Timer führen: 1. Im Hauptprogramm setzt du deine Datenrichtungen & Ports ... 2. ... Timer/Counter-Interrupt Mask setzen (TIMSK) ... 3. ... Timer/Counter Prescaler setzen ... 4. ... Timer mit Wert laden ... 5. ... Interrupts freigeben. 6. In deiner ISR (in meinem Beispiel tim_ovf1) lädst du deinen Timer neu und machst den Kram, den du halt in der ISR machen wolltest :) 7. debuggen 8. läuft wie gewollt ? dann springe zu 10. 9. goto 7. 10. über die geleistete Arbeit freuen Im Anhang findest du ein einfaches Beispiel aus der Praxis. Meine Frau brauchte einen Timer für 180 Sekunden. Falls du nicht weiterkommst (nach dem Studium des Datenblattes) frag' halt nochmal. Grüße, Alex
SRY: Noch kurz was zur Erklärung des Beispielprogramms: Zwischen PB0 und PB1 ist eine 2-polige-DUO-LED. Diese blinkt 180 Sekunden rot und danach für 10 Sekunden gruen. Das 'Ding' findet übringens als 'Zahnputzuhr' in unsrem Haushalt Verwendung :) Grüße, Alex
Hallo Du hast einen Controller dafür geopfert? Finde ich ja gut. Wenn der Controller im sleepmodus ist, wieviel Strom nimmt er dann? Hast Du noch mehr solcher kleinen Haushelferchen??? Gruss Frank
Irgendwo muss man ja die Controller, die laut Spezifikation gar nich mehr zu brennen sein dürften (wg der Anzahl der Brennvorgänge), ja 'entsorgen' :-) Tja ... mit dem Sleepmodus hab ich mir die Karten gelegt: Auf meinem Testboard war alles wunderbar und die Stromaufnahme so gering, dass (vorsichtig gerechnet) das Teil mindestens ein 3/4 Jahr mit einer 9V Batterie laufen sollte. Werte weiss ich nicht mehr. Dann hab ich ein Platinchen gemacht (und genau hier nimmt das Schicksal seinen Lauf ...): Auf meinem Testboard habe ich nur die Stromaufnahme vom Controller + LED gemessen. Auf der Platine ist aber noch ein 78L05 mit drauf ... dieser nimmt sich sage und schreibe 3mA !! Nach zwei Tagen war die Batterie leer hmpf Naja aus Fehlern lernt man. Da das Ding recht praktisch ist hab ich halt ein herumliegendes Steckernetzteil genommen und seitdem verrichtet die 'Uhr' ihren Dienst. Ich ärger' mich allerdings mindestens zwei mal am Tag (beim Zähneputzen eben...) über die Verlustleistung des Steckernetzteils. So viel zu dieser Bastelei. 'Helferlein' hab' ich sonst keine. Ich hab vor gut zwei Jahren mit den Controllern angefangen, weil mich das Thema Hausautomation beschäftigt: Busknoten in jedem Zimmer, welche vom PC aus mit Daten versorgt werden können. Die Knoten laufen auch ohne PC. PC dient nur zur Kontrolle und Eingabe von Daten (Zeiten ...). Vernetzt is das ganze über RS485. Bisher nur in meiner Bastelbude mit 4 Knoten getestet. Das tatsächlich in den realen Betrieb zu integrieren is mir z zt zu aufwändig. Das fängt damit an, dass bei uns keine Leer-Rohre liegen ... Grüße, Alex
Hallo und was würdest Du mit dem Hausbus alles so steuern wollen. Hast Du Beruflich mit den Controllern zu tun oder auch alles learning by doing? Frank
Alles learning by doing. Programmieren tu' ich allerdings schon über 20 Jahre. Da war das mit den Controllern keine grosse Sache. Beruflich mach ich was ganz anderes. Nix mit Elektronik oder Software. Ist alles Hobby. Was ich damit steuren werde in Zukunft ? Naja - Ich bin zur Vernunft gekommen. Man redet ja schonmal vom vernetzten Haus ... Alles Blödsinn, finde ich. Keine (!) Software ist fehlerfrei ! Über die Konsequenzen von Bugs mag ich garnicht weiter nachdenken (egal ob das Zeug nun von 'professionellen' oder vom Hobbybastler stammt). Ich werde mich auf Heizung + Rolladen beschränken. Beim Licht will ich auf den guten, alten Schalter nicht verzichten. Aber auch aus den beiden Dingen Heizung und Rollade kann man mehr raus holen als man auf den ersten Blick vermuten mag: Zum Beispiel kannst du über 'nen LDR gucken obs Tag oder Nacht is. Dann misst du noch die Aussentemperatur und kannst ggf auf der Seite wo die Sonne so strak scheint die Rollade automatisch runter lassen damit es in der Bude nicht unnötig heiss wird. Grüße, Alex
muss schon sagen respekt! Ich habe gerade angefangen mit AVR und Assembler. Ich tu mich schwer mit dem Assembler und vor allem mit dem Datenblatt des Atmega8. Ist schon harter toback dieses Fachenglisch. Aber ich werdemich da durchbeissen;-)! Frank
Ich wünsch dir viel Erfolg dabei. ... und wenn alles nix hilft ... 's gibt ja noch das Forum hier und google. Grüße, Alex
Hallo Alex, ich melde mich nochmals zurück.. ;-) Leider bekomme ich es einfach nicht hin, dass es läuft.. Habe dein Programm mal kompiliert (erst die mega8 Def. eingefügt!) und auf meinen "kleinen" gespielt.. Leider liegt dann nur 01010101 auf dem PORTB an, und es tut sich nichts.. Das selbe in der simulation im AVRStudio! Was könnte ich da falsch machen?
Du hast zwar nicht kompiliert sondern assembliert (ist ein Unterschied), aber das macht ja nix... Hast du die Interrupt-Vektor-Tabelle deinem AVR angepasst?? Denn die ist bei den einzelnen AVRs unterschiedlich. Die Datenblätter der einzelnen AVR-Typen werden dabei deine Freunde sein. ...
Hi, du solltest Dir das Tutorial ansehen. Bei der Assemblerporgrammierung muss man wirklich alles zu Fuss machen. Ein Compiler(z.B.Bascom) nimmt Dir die Arbeit zur Initalsierung des Stacks ab. Mfg Dirk
Hallo, das Bitmuster 01010101 ist schon richtig. Dieses Bitmuster erscheint aber erst nach 180 Sekunden. Voher wechseln sich im Sekundentakt '10101010' und '00000000' ab. Der Wechsel zwischen 0xAA und 0 bewirkt, dass die (zweibeinige DUO-)LED im Sekundentakt rot blinkt. Das andere Bitmuster, welches bei dir dauerhaft zu sehen ist bewirkt, dass die LED grün leuchtet. Die Leuchtdiode ist in der Schaltung direkt zwischen zwei Portpins angeschlossen. Ich wollte die LED auf einfache Art umpolen können wg der Farbe. Tja - wie kommst du nun voran ? Ich empfehle dir auch (wie Dirk), dass du mal das Tutorial genau durcharbeitest. Danach wirst du dann auch das Posting von HanneS verstehen. Tipp am Rande: Auf der Atmel-Homepage gibt es ja App-Notes in Massen. Dort sind auch immer nette Beispielprogramme dabei. Von denen hab' ich sehr viel gelernt. Noch'n Tipp: Registrier dich bei AVRFREAKS.NET. Dort kommst du dann auch in einen Bereich hinein, in dem man sich (Beispiel-) Programme runterladen kann. Nach wie vor viel Erfolg, Alex
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.