hallo ihr lieben, kann mir vll einer von euch weiter helfen? Ich grad abissal an denk fehler und komm nicht weiter, habe versucht meine LED zum blicken zu bringen. mit dem on_reset und der main_loop hab ich geschafft sie mal zum leuchten zu bringen aba der zeit blinkt sie nich so schnell dass ma des mit freiem auge nicht sieht, jetz hab ich versucht mit den delay_loops da einbisschen herum zu spielen. was aber leider nicht funktioniert :( freu mich über jeden Tipp danke im anhang hab ich den code von mir.
Du hast Glück, dass ich zu spät gesehen habe, dass du ein Word File hochgeladen hast, Da hatte ich schon draufgedrückt. WElcher Teufel hat dich geritten, dein Programm in ein Word-File zu stellen? Lade das Assembler-File hoch, so wie du es auf dem Rechner hast! Mehr braucht es nicht. Das ist für dich am wenigsten Arbeit und für uns auch. Und die Chancen, dass sich wer das Machwerk ansieht steigen enorm, weil an und für sich niemand leichtfertig ein Word-File aus dem Web aufmacht.
:
Bearbeitet durch User
Müsste das rjmp nicht rcall heissen? Der Unterschied ist: rcall kehrt zurück beim ret, dafür wird dabei die Rücksprungadresse auf dem Stack gespeichert. rjmp kehrt (eigentlich) nicht zurück, deshalb wird die Retouradresse nicht gespeichert. Da da aber trotzdem ein RET steht, wird etwas undefinierbares gelesen und der Prozessor crasht.
Hier das original
1 | .device attiny2313 ; Set device to ATTiny2313 |
2 | .include "tn2313def.inc" ; Include file for ATTiny2313 |
3 | .list ; Turn listfile generation ON |
4 | |
5 | .def temp = R16 |
6 | |
7 | .equ Tx = PB4 |
8 | |
9 | .cseg |
10 | |
11 | .org 0x00 |
12 | |
13 | rjmp on_reset ; Relative jump to "on_reset" |
14 | |
15 | |
16 | on_reset: |
17 | |
18 | ldi temp, ( 1 << Tx) ; Load immediate temp with Tx as 1 |
19 | out DDRB, temp ; Configure Port B with Tx as output using temp |
20 | |
21 | ldi temp, ( 0 << Tx) ; Load immediate temp with Tx as 0 |
22 | out PORTB, temp ; Output temp on Tx |
23 | |
24 | |
25 | |
26 | main_loop: |
27 | |
28 | ldi temp, (1 << Tx) ; Load immediate temp with Tx as 1 |
29 | out PORTB, temp ; Output temp on Tx |
30 | |
31 | //rjmp delay1 |
32 | |
33 | ldi temp, ( 0 << Tx) ; Load immediate temp with Tx as 0 |
34 | out PORTB, temp ; Output temp on Tx |
35 | |
36 | rjmp delay2 |
37 | |
38 | rjmp main_loop ; Relative jump back to beginning of main loop |
39 | |
40 | delay1: |
41 | |
42 | ldi temp, 230 |
43 | delay1_loop: |
44 | dec temp |
45 | brne delay1_loop |
46 | ret |
47 | |
48 | delay2: |
49 | |
50 | ldi temp, 1 |
51 | delay2_loop: |
52 | dec temp |
53 | brne delay2_loop |
54 | ret |
Birgit schrieb: > freu mich über jeden Tipp Jeden? Blinkende LED 1,61€ z.B. http://www.conrad.de/ce/de/product/173525/LED-bedrahtet-Gruen-Rund-10-mm--Kingbright-L-816BGD
Birgit schrieb: Conny hat ja schon was dazu gesagt > versucht mit den delay_loops da einbisschen herum zu spielen. Du brauchst auf jeden Fall 2 Delays. Denn es muss ja 2 mal gewartet werden! EInmal nach dem Einschalten, einmal nach dem Ausschalten > was aber > leider nicht funktioniert :( freu mich über jeden Tipp *danke* Der Tipp lautet: Überleg mal ein bischen, wie schnell deine Delay Loops abgearbeitet werden. Dein µC macht (wenn er noch mit den Standardmässigen 1Mhz arbeitet) rund 900-tausend Befehle in der Sekunde. Was denkst du, wie lange es dauert, bis der von 1 auf 0 (oder von 230 auf 0) heruntergezählt hat? Tip: Das kann man berechnen, weil man weiß, wieviele Takte für jeden einzelnen Befehl benötigt werden und die Befehle kennt man ja. Fazit: Es gibt Dinge, die kann man durch 'spielen' rausfinden bzw. adaptieren. Es gibt aber auch Dinge, die werden einfach mal knallhart ausgerechnet bzw. bestimmt und dann zieht man seine Schlüsse.
:
Bearbeitet durch User
oh sorry... des mit dem Word war nicht bös gemeint :) haha is mein erster eintrag in so ein forum, man lernt ja nie aus :) wenn ich nicht alles täuscht arbeitet er mit 4 MHz. Danke für die Tipps ich werd sie gleich mal aus probieren!!
Ist zwar nicht blink sondern Blitz artig, funktioniert aber auch, indem du den Kondensator vergrösserst, verkleinerst
Tip: ein Register von 0xFF runter zu zählen reicht nicht. Das geht so schnell, dass du kein blinken erkennen wirst. Das Register mus mehrfach runtergezählt werden. Das erreicht man durch eine Art Verschachtelung zweier Zählschleifen. Delay: 1-Lade Zähler_1 2-Lade Zähler_2 3-Verringere Zähler_2 bis auf 0 4-Wenn Zähler_2 Null ist, DEC Zähler 1 und beginne wieder bei 2 5-Wenn Zähler_1 dann endlich auch Null ist, simmer fertisch. 6-Ret Andere Frage: Wird so etwas heutzutage in der Schule gelehrt? In welcher?
Hilfe schrieb: > Andere Frage: Wird so etwas heutzutage in der Schule gelehrt? In > welcher? Also In der berufsschule als Automatiker Elektroniker lernt man dass, wenn auch nur kurz, und ich nicht aufgepasst habe-.- leider..
Wir habens erst beim Techniker gelernt. Aber auch nur kurz angeschnitten das Thema. Dann weiter mit C.
ich studieren eig medizintechnick. aber ich mach grad ein internship im department of electronic and computer engineering. In da FH zuhause hab ich hochsprachen programmiert und hier wollen sie dass ich mit assembler arbeite. Jetz versuch ich mir des irgendwie selbst bei zu bringen.Und da dacht ich dass es nicht so schwer sein kann eine LED zum blinken zu bekommen...hahaha abissal verdacht :P
Hallo Birgit, vielleicht kannst Du mit einem Oszilloskop während Deiner Programmiererei die Takte an der Led verfolgen. Das Auge kann nur bis etwa 20 Hz auflösen. Eventuell kannst Du kapazitiv (über 100nF oder 10nF) ein Headset ankoppeln und dann einen Schaltton hören. ... kleiner Tip zum debuggen. Gruß Bernd
Oliver Bucher schrieb: > Ist zwar nicht blink sondern Blitz artig, funktioniert aber auch, indem > du den Kondensator vergrösserst, verkleinerst Oliver Bucher schrieb: > Also In der berufsschule als Automatiker Elektroniker lernt man dass, > wenn auch nur kurz, und ich nicht aufgepasst habe-.- leider.. Den Sinn von LED-Vorwiderstaenden scheint man dort aber nicht zu lehren..
Birgit schrieb: > ich studieren eig medizintechnick. aber ich mach grad ein internship im > department of electronic and computer engineering. In da FH zuhause hab > ich hochsprachen programmiert und hier wollen sie dass ich mit assembler > arbeite. Jetz versuch ich mir des irgendwie selbst bei zu bringen.Und da > dacht ich dass es nicht so schwer sein kann eine LED zum blinken zu > bekommen...hahaha abissal verdacht :P Wenn du Hochsprachen schon kannst: ein Funktionsaufruf ist nichts anderes als ein RCALL. Zurück gehts aus der Funktion mit einem RET. Aber auch in einer Hochsprache muss dir klar sein, dass ein 'Schalte LED ein' 'Schalte LED aus' 'Schalte LED ein' 'Schalte LED aus' ohne irgendwelche Pausen dazwischen, viel zu schnell für ein sichtbares Blinken ist. Und zwar zischen JEDER Operation und nicht nur zwischen dem Einschalten und dem Ausschalten. in
1 | while( 1 ) |
2 | { |
3 | |
4 | LED ein |
5 | <----- |
6 | LED aus |
7 | <----- |
8 | } |
muss an BEIDEN markierten Stellen eine Wartezeit rein, denn sonst würde die jeweils gegenteilige Operation zeitlich unmittelbar auf die vorhergehende folgen und das wäre viel zu schnell.
Helmut Lenzen schrieb: > Den Sinn von LED-Vorwiderstaenden scheint man dort aber nicht zu > lehren.. hehe, lehren schon, nur bei der Anwendung tut s bisschen schwer..:) Also meiner läuft jetzt schon ca 1 Monat ununterbrochen, mit ca alle 1-1.5 sec blinkung, und das led hats nicht gehauen.. oli PS. habs von da, und nicht selber gezeichnet..
:
Bearbeitet durch User
Eine LED nimmt ja auch nur Schaden, wenn sie längere Zeit überlastet wird. In jedem LED-Datenblatt gibt's die maximale Impulsbelastung zu sehen. Wenn das also mehr blitzt als blinkt, dann ist es nur ein Impuls (der hoffentlich in den Impuls-Specs liegt) und die LED hat Zeit zum Abkühlen und es geschieht ihr nichts. Also hat Helmut Recht, weil da eigentlich ein Vorwiderstand hingehört. Und die Schaltung ist trotzdem "tragbar", weil's die LED auf diese Weise aushält.
Conny G. schrieb: > Also hat Helmut Recht, weil da eigentlich ein Vorwiderstand hingehört. > Und die Schaltung ist trotzdem "tragbar", weil's die LED auf diese Weise > aushält. Was aber nicht durch sorgfältiges Design, sondern sehr "empirisch" ermittelt wurde. Conny G. schrieb: > dann ist es nur ein Impuls (der hoffentlich in den Impuls-Specs liegt) Nennt sich auch in Denglisch: "Development by accident"
Conny G. schrieb: > Also hat Helmut Recht, weil da eigentlich ein Vorwiderstand hingehört. > Und die Schaltung ist trotzdem "tragbar", weil's die LED auf diese Weise > aushält. Wie gesagt, Der Plan ist nich von mir: http://www.elektronik-radio.de/41332.html und ich habe ja nie gesagt, man solle keine Vorwiderstände nehmen..
Udo Schmitt schrieb: > Was aber nicht durch sorgfältiges Design, sondern sehr "empirisch" > ermittelt wurde. Sorgfältiges Ausprobieren. Stromquelle. LED dran. Fump, Rauchwolke. "Oh, dann müssen wir sie mal blinken lassen, vielleicht geht's dann.". Blinkt. Freut sich. Minuten später, schmurgel, Rauchwolke. "Mmmh, kürzer blinken." Yuhuuh.
Conny G. schrieb: > Also hat Helmut Recht, weil da eigentlich ein Vorwiderstand hingehört. > Und die Schaltung ist trotzdem "tragbar", weil's die LED auf diese Weise > aushält. Ich würd' eher anders vermuten: Der Output kann bei weitem nicht die 20mA und wenn, geht die Ausgangsspannung derart in den Keller dass da wirklich nur roundabout 20mA fließen (lass es 25mA sein oder 30mA, das haut die LED nicht um noch dazu wenn sie blinkt). Problem dabei ist: "Wieso geht das jetzt nicht mehr, das ist ja vorher auch gegangen". rgds
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.