Forum: Mikrocontroller und Digitale Elektronik Schaltplan0010


von Biagio L. (bilett)


Angehängte Dateien:

Lesenswert?

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
von Biagio L. (bilett)


Angehängte Dateien:

Lesenswert?

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);

     }
    }
}

von MaWin (Gast)


Lesenswert?

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).

von Biagio L. (bilett)


Lesenswert?

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);

    }
    }
}

von MaWin (Gast)


Lesenswert?

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

von P. P. (Gast)


Lesenswert?

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.

von Biagio L. (bilett)


Lesenswert?

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 :-)

von Achim M. (minifloat)


Lesenswert?

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

von Biagio L. (bilett)


Lesenswert?

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

von Achim M. (minifloat)


Lesenswert?

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

von Achim M. (minifloat)


Angehängte Dateien:

Lesenswert?

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

von Biagio L. (bilett)


Lesenswert?

Danke dir Achim
MFG

von Kark (Gast)


Lesenswert?

Fängt er wieder anfangen tun?.

von Stefan F. (Gast)


Lesenswert?

Kark schrieb:
> Fängt er wieder anfangen tun?.

"tun" sagt man nicht!

von Adolf Tegtmeier (Gast)


Lesenswert?

Kark schrieb:
> Fängt er wieder anfangen tun?.

Er fängt wieder am Tun am Fangen.

https://youtu.be/uo2QEOlJE7Y

von Biagio L. (bilett)


Lesenswert?

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

von Achim M. (minifloat)


Lesenswert?

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
von Biagio L. (bilett)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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
Noch kein Account? Hier anmelden.