Hallo, Gute Abend am Alle Ich befasse mich seite2 woche mit meine neu Hobby (Atmega8A ) Programmierung ich möschte eine netzteile programmieren und über die LED mir anzeigen Lassenin velche status sich befindet 2V,3V,4V,5V und uber Taste auch E Einstellen Taste_UP, Taste Down und 4 Led. nur habe problem wenn ich TASTE_UP drucken geht nur LED 1 an taste Loslassen wieder aus andre LED keine reaction und Taste_DOWN keine Funtion Bitte um Hilfe auf eine Losung. Tausen Danke in Vorraus. Ich haben in meine Platine eine ATMEGA8-16AU TQFP ist Gleich wie ATMEGA8L TQFP ? Meine C Code: /* * ATMEGA8A _TASTE_LED.c * * Created: 13.05.2021 18:47:15 * Author: Diagnose */ #include <avr/io.h> #define LED_1 PC4 #define LED_2 PD4 #define LED_3 PD5 #define LED_4 PD6 #define LED_ON 1 #define LED_OFF 0 int main(void) { DDRD = 0xFF; DDRD &= ~(1<<2)|(1<<3); while(1) { if (PIND &(1<<PD2)) { PORTD |= (1 << LED_1); } if (PIND &(1<<PD2)) { PORTD &= ~(1 << LED_1); PORTD |= (1 << LED_2); } if (PIND &(1<<PD2)) { PORTD &= ~(1 << LED_2); PORTD |= (1 << LED_3); } if (PIND &(1<<PD2)) { PORTD &= ~(1 << LED_3); PORTD |= (1 << LED_4); } if (PIND &(1<<3)) { PORTD &= ~(1 <<LED_4); PORTD |= (1 << LED_3); } if (PIND &(1<<3)) { PORTD &= ~(1 <<LED_3); PORTD |= (1 << LED_2); } if (PIND &(1<<3)) { PORTD &= ~(1 <<LED_2); PORTD |= (1 << LED_1); } } }
:
Verschoben durch Moderator
Hallo, Gute Abend am Alle Ich befasse mich seite2 woche mit meine neu Hobby (Atmega8A ) Programmierung ich möschte eine netzteile programmieren und über die LED mir anzeigen Lassenin velche status sich befindet 2V,3V,4V,5V und uber Taste auch E Einstellen Taste_UP, Taste Down und 4 Led. nur habe problem wenn ich TASTE_UP drucken geht nur LED 1 an taste Loslassen wieder aus andre LED keine reaction und Taste_DOWN keine Funtion Bitte um Hilfe auf eine Losung. Tausen Danke in Vorraus. Ich haben in meine Platine eine ATMEGA8-16AU TQFP ist Gleich wie ATMEGA8L TQFP ? Meine C Code: /* * ATMEGA8A _TASTE_LED.c * * Created: 13.05.2021 18:47:15 * Author: Diagnose */ #include <avr/io.h> #define LED_1 PC4 #define LED_2 PD4 #define LED_3 PD5 #define LED_4 PD6 #define LED_ON 1 #define LED_OFF 0 int main(void) { DDRD = 0xFF; DDRD &= ~(1<<2)|(1<<3); while(1) { if (PIND &(1<<PD2)) { PORTD |= (1 << LED_1); } if (PIND &(1<<PD2)) { PORTD &= ~(1 << LED_1); PORTD |= (1 << LED_2); } if (PIND &(1<<PD2)) { PORTD &= ~(1 << LED_2); PORTD |= (1 << LED_3); } if (PIND &(1<<PD2)) { PORTD &= ~(1 << LED_3); PORTD |= (1 << LED_4); } if (PIND &(1<<3)) { PORTD &= ~(1 <<LED_4); PORTD |= (1 << LED_3); } if (PIND &(1<<3)) { PORTD &= ~(1 <<LED_3); PORTD |= (1 << LED_2); } if (PIND &(1<<3)) { PORTD &= ~(1 <<LED_2); PORTD |= (1 << LED_1); } } }
Biagio L. schrieb: > Bitte um Hilfe auf eine Losung. Ja, das funktioniert so nicht. Du hast grundlegendes in der Programmierung noch nicht verstanden. Lies ein paar Tutorials, über Tastenentprellung und Zustände (state machines).
Tausen Dank MaWin für die Schnell antwort Gute Morgen Habe diese Code jetz probiert es funtioniert ganz gut pind_5 an und aus mit pollin Board. aber auf meine platine bei taste drucken geht led an, bei loslassen wieder gleich aus was mache ich falch? oder in meine schaltplan ist eine Fehler? Habe erst mal nur mit eine Led an und aus mit Taste an PD_2 ausprobiert Dankein vorraus und eine schone tag #define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> #define button1_up (PIND &(1<<PD2)) #define button1_down (!(PIND &(1<<PD2))) int main(void) { DDRD = 0xFF; DDRD &= ~(1<<PD2)|(1<<PD3); char zustand = 0; while(1) { if (button1_down && zustand == 0) { PORTD ^= (1<<PD5); zustand = 1; } else if (button1_up && zustand == 1) { zustand = 0; _delay_ms(30); } } }
Biagio L. schrieb: > was mache ich falch Du hast noch nicht genug Grundlagen über Tastenentprellung und Zusände von state machines gelesen. So schnell '24 Stunden' wird man halt kein Profiprogrammierer
Dein Code macht genau das: beim Drücken geht die LED an, beim Loslassen aus. Wenn du "toggeln" willst, also dass die LED bei einmal drücken an bleibt und beim zweiten Mal ausgeht, dann musst du deine Bedingungen anpassen: Drücken + Zustand 0: LED einschalten Drücken + Zustand 1: LED ausschalten. Das Losslassen der Taste interessiert dann nicht.
Hallo eine schon Gute abend Danke für die antwort ich bin am zweifeln meine code mit pollin board funtioniert seher gut mit meine platine anbei schaltplane bekomme noch nicht eine Leed zum blinken wenn ich eine blink programm dreauf programmieren bleibt die LED nur an blinkt nicht des selber programm bei pollin Board funtioniert einwand frei kann sein das in meine schaltpan eine Fehle drin ist. Danke in vorraus kann mir jemand meine code korrigieren zum ausprobieren ob meine platine fehleraft ist meine schaltplan ist in anhang bitte um info bin fast am alles zum entsorgen :-)
Biagio L. schrieb: > bitte um info bin fast am alles zum entsorgen :-) Jeder Profi war irgendwann an dem Punkt. Manchmal hilft es, die Sachen für eine Woche herum liegen zu lassen. Dann hat man wieder frischen Elan und neue Ideen. Biagio L. schrieb: > wenn ich eine blink programm dreauf programmieren bleibt die LED nur an > blinkt nicht Fusebits sind vermutlich falsch eingestellt, dadurch ist der Takt zu langsam. Du siehst den ersten Blink-Puls extrem gestreckt. Sieht aus wie dauernd an... Biagio L. schrieb: > kann mir jemand meine code korrigieren zum ausprobieren ob meine platine > fehleraft ist Wenn es immer noch das tun soll, was du im ersten Post geschrieben hast, kann ich ein hex-file erstellen, welches am Anfang alle LEDs dreimal blinken lässt und dann das Verhalten aus dem Ausgangspost zeigt. Code gibt es später, weil du sonst nichts lernst. Aber genau das willst du ja :) mfg mf
gute Morgen Achim Danke für die antwort doch ich will es lernen Habe gegugelt Taste emprellung aber es gibt immer die selber (PORT)Taste Abfragen und Pull-up einsetze bei mir brauche keine pull-up habe extern eingebaut oder? 10K widerstand pro taste oder brauche ich auch eine Kondensator dazu? Ja bitte die Hex datai reicht mir erst mal das ich meine platine prufen kann ob es wirklisch funtioniert. Hast du dir meine schaltplan angegukt ist es ok ? ich programmieren mit atmelstudio eine Atmega8A auf die platine habe ich eine atmega8-16AU kann es sein das bei (processor den Fehler ligt) Atmega8 sind normal alle gleich Oder? Danke für deine Hilfe ich wunsche dir eine schone tag noch MFG Biagio
Biagio L. schrieb: > brauche keine pull-up habe extern eingebaut Ja, passt erstmal so. Biagio L. schrieb: > Hast du dir meine schaltplan angegukt ist es ok ? Schaltplan sieht ok aus. Biagio L. schrieb: > Atmega8 sind normal alle gleich Oder? Ja, wenn du wirklich den alten ATmega8 benutzt. Der ATmega88 zum Beispiel ist funktionskompatibel, aber nicht in allen Punkten gleich. Biagio L. schrieb: > Ja bitte die Hex datai reicht mir erst mal Werde ich im Laufe des Tages machen, ja. mfg mf
Probiere mal die angehängten Dateien. Achtung, Hexfiles sind ungetestet, ich habe gerade keinen ATmega8 da. Daher kommt der Quellcode gleich mit. Am Anfang des Programms Blinken alle LEDs 3x: 1sec an, 1sec aus, 1sec an, 1sec aus, 1sec an, 1sec aus Damit kanst du auch prüfen ob dein Prozessortakt stimmt. Danach beginnt das Hauptprogramm mit Status = LED2. Der Status LED2, LED3, LED4, LED5 kann man mit den up/down Tasten hin und herschalten. S1 = up und S2 = down. Nach LED5 geht es mit S1 nicht weiter nach oben. Nach LED2 geht es mit S2 nicht weiter nach unten. Viel Spaß damit, mfg mf
Kark schrieb: > Fängt er wieder anfangen tun?. Er fängt wieder am Tun am Fangen. https://youtu.be/uo2QEOlJE7Y
Hallo Achim eine schon gute abend habe es ausprobiert es bleib alle Led immer an es sollte normal 3-4 mal erst blinken habe das code auf pollin board mit atmega8 probiert es funtioniert, auf meine platine nicht ich glaube haben eine fehler in die schaltung (Platine) ich bestelle eine neu dann probiere noch mal. auf meine platine habe ich am fusebit gespielt bekomme nicht mehr in, aber wenn pollin board anschliessen funtioniert wieder kannst du mir eine tipp geben wie ich wiederdie fusebit in bekommen? habe alle einstellung schon probiert habe auch in forum gelesen wenn SPIEN GESETZT ist geht nicht mehr uber ISP habe auch eine neu (chip Atmega8) Drauf gelötet immer noch nix was kann ich noch einstellen? Ich danke die viel mals ich sage dir bescheid ob Funtioniert mit die neu platine MFG Biagio
Biagio L. schrieb: > Hallo Achim > eine schon gute abend > habe es ausprobiert es bleib alle Led immer an es sollte normal 3-4 mal > erst blinken > habe das code auf pollin board mit atmega8 probiert es funtioniert, Na das freut mich einerseits, dass die Software läuft, andererseits schade, dass deine Hardware nicht funktioniert. Hast du beide Hex Dateien probiert? Welches "Pollin Board" verwendest du? Biagio L. schrieb: > glaube haben eine fehler in die schaltung (Platine) > ich bestelle eine neu dann probiere noch mal. Kannst du ohne Prozessor auf deiner Platine alle Netze einmal mit dem Multimeter nachmessen? Biagio L. schrieb: > auf meine platine habe ich am fusebit gespielt bekomme nicht mehr in, Wie du schon vermutest, wenn die SPIEN Fuse deaktiviert ist, kann per ISP nicht mehr geflasht werden. Guck mal: https://www.engbedded.com/fusecalc/ Biagio L. schrieb: > kannst du mir eine tipp geben wie ich wiederdie fusebit in bekommen? Dazu brauchst du einen HVSP Programmer oder einen "Fusebit Doctor" Biagio L. schrieb: > habe auch eine neu (chip Atmega8) Drauf gelötet immer noch nix Wie wäre es, eine Fassung für den Prozessor zu bestücken? Dann entfällt Löten für mal schnell Prozessor tauschen. Biagio L. schrieb: > was kann ich noch einstellen? Prüfe mal "Watchdog timer always on WDTON" Fuse. Die sollte aus sein. mfg mf
:
Bearbeitet durch User
Eine schon gut Morgen Achim. Ja habe beider Hex Probiert es Blinkt nicht Pollini Board ist die Ver. 2.01 Habe die Led aufgebaut und hat Funtioniert Habe neu platine Bestellt, Hast du recht habe die Atmega auf die Platine geendert habe jetz eine Atmega 8P zum drauf Stecken ist einfach. es kann sein das bei die alte platine den Quarz kaputt war? habe nicht ausprobiert ist scon in mull gelandet aber teoretich den quarz lasst den Led Blinken oder? Viel Danke für deine Hilfe MFG Biagio PS.Es gibt zum gluck immer noch hilfsbereit Leute und nich nur spasst.
Biagio L. schrieb: > teoretich den quarz lasst den Led Blinken oder? Der Quarz treibt den Mikrocontroller an. Der Mikrocontroller führt das Programm aus. Das Programm lässt die LED blinken. Der Mikrocontroller kann aber auch ohne Quarz betrieben werden. Das stellt man mit den FUSES ein.
Biagio L. schrieb: > es kann sein das bei die alte platine den Quarz kaputt war Keiner weiss, was du auf deiner Platine zusammengebastelt hast. Wird halt falsch gewesen sein. Mit Erfahrung kann man aber die fuses des ATmega auf internen RC Oszillator umstellen, dann ist egal ob der Quartz kaputt ist, falsch verdrahtet oder fehlt.
Biagio L. schrieb: > es kann sein das bei die alte platine den Quarz kaputt war? Dann muß der Programmer beim Lesen der Signatur und beim Verify meckern. Ohne Takt geht das ISP nicht.
Das Hauptproblem am Entprellen und Flanke erkennen ist, daß es unabhängig von der Laufzeit der Mainloop sein muß, wenn es zuverlässig erfolgen soll. Daher ist der beste Platz dafür ein Timerinterrupt, z.B. alle 10ms. Das Main bekommt nur Flags geliefert, die es bequem auswerten kann, auch wenn die Taste schon wieder losgelassen wurde. Will man diese Trennung nicht einsehen, bleibt es immer unzuverlässig und funktioniert nur rein zufällig. Weiterhin werden solche Programme sehr unübersichtlich und fehlerträchtig.
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.