Guten Nachmittag zusammen, ich möchte gerne meinen Atmega 16 programieren. Und zwar das er nach dem drücken einer Taste (bzw. Taster) die erste LED für 2 Sek., sie abschaltet und danach die zweite LED für 5 Sek. leuchten lässt und diese dann auch abschaltet. Hab schon viel gegooglet, doch zu einem richtigen ergebnis kam ich bis jetzt noch nicht. Möchte das mit einem Timer realisieren, jedoch hab ich keinerlei ahnung von der Programierung bzw. der Funktionsweise eines Timers. Hier mein bis jetzt zusammen gebastelter Quellcode: 1. $regfile = "m16def.dat" 2. 3. 4. 5. '$crystal = 8000000 6. $baud = 38400 7. 8. Ddrb = &B1111_0000 9. 10. Ddrd = &B0000_0000 11. 12. 13. 14. Portb.4 = 0 15. Portb.5 = 0 16. Portb.6 = 0 17. Portb.7 = 0 18. Portd = &B1111_1111 19. 20. 21. Dim LEDZeit1 As Word 22. Dim LEDZeit2 As Word 23. 24. 25. LED1 Alias Portb.4 26. LED2 Alias Portb.5 27. 28. 29. 'TASTER1 an PD2 30. Taster1 Alias Pind.2 31. Config Taster1 = Input 32. 33. 'TASTER2 an PD3 34. Taster2 Alias Pind.3 35. Config Taster2 = Input 36. 37. 38. 39. Config Timer1 = Timer , Prescale = 256 40. On Timer1 Zeit 41. 42. Enable Timer1 43. Load Timer1 , 34285 44. 45. 46. Enable Interrupts 47. 48. LEDZeit1 = 0 49. LEDZeit2 = 0 50. 51. 52. Do 53. Debounce Taster1 , 0 , On_taster1 , Sub 54. Debounce Taster2 , 0 , On_taster2 , Sub 55. Loop 56. 57. 'End 58. 59. Zeit: 60. 61. On_taster1: 62. 63. Incr LEDZeit1 64. If LEDZeit1 => 1 Then LED1 = 1 Else LED1 = 0 65. If LEDZeit1 = 9 Then Reset LEDZeit1 66. 67. Return 68. 69. On_taster2: 70. Incr LEDZeit2 71. If LEDZeit2 => 1 Then LED2 = 1 Else LED2 = 0 72. If LEDZeit2 = 9 Then Reset LEDZeit2 73. 74. Return 75. 76. End Weiter weiß ich nicht....das ding macht einfach nicht was ich will. Wäre nett von euch wenn ihr mir weiterhelfen könnten. Habe nicht wirklich Ahnung vom Programieren, also bitte nicht so viele Fachausdrücke ;-) Danke im Vorraus Gruß Eli
Wozu benutzt du Timer? Lass einfach in deiner Do-Loop Schliefe die Tastenabfrage laufen und wenn eine Taste gedrückt wurde,dann spingst du in einer Sub Routine. Dort machst du die Wartezeit mit dem WAITMS befehl und nachdem die 2. LED ausgeht springst du wieder zurück in deine Do-Loop. Und der Debounce Befehl ist dann auch unnötig gruss Axel
Erstmal danke für die schnelle Antwort. Das problem an der Sache ist nur: Das Programm stellt erstmal nur ein Grundgerüst da, wenn ich es erweitern möchte bzw. ich will es später erweitern, ist das mit waitms nicht vorteilhaft. Bei waitms geht der "Prozessor" wie ich gehört habe in einen Ruhezustand oder so ähnlich und kann zu dieser zeit keine anderen befehle mehr annehmen bzw. verarbeiten. Bitte korrigier mich wenn ich da falsch liege. Gruß Eli
hast du ein Experimentierboard wo du Testen kannst? Was macht er denn genau nicht? btw. '$crystal = 8000000 fällt mir auf.
waitms ist natürlich genau das was einem anfänger beigebracht werden sollte...
Bis jetzt rein garnichts was ich will. Wenn ich den Mikrocontroller starte leuchtet LED1 sofort. Wenn ich dann Taster1 drücke schaltet sich LED2 dazu. Beim drücken von Taster2 gehen beide LEDs aus solange ich ihn gedrückt halte. Danach geht wieder LED1 an...wie beim start.
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.