Forum: Mikrocontroller und Digitale Elektronik 7 Segment anzeige


von Michael Knapp (Gast)


Lesenswert?

Hallo

Kann mir jemand auf die sprünge helfen?
Ich würde gerne mit einem ATmega8 ein Analoges signal von 0-4V messen
und das dann auf 4 7-Segment anzeigen von 0 -1150 ausgeben.

Kann mir bitte jemand mit einem CODE beispiel am besten in Assembler
helfen damit ich verstehe wie die umwandlung  von den 0-4V nach 0-1150

auf den 7-Segment Anzeigen vorsich geht.

 Ich bedanke mich schon mal für jede kleine Hilfe

Michael

von kamil (Gast)


Lesenswert?

hi,
ich hab hier ein stück code, allerdings ins C,
wo ich allerdings nur zwei 7 segment anzeigen ansteuere.
im prinzip ganz simpel.
zuerst die eine zahl auf den port wo die eine anzeige dran sind,
dann umschalten auf die andere.
d.h. jeweils nur eine ist an, aber wenn man schnell genug wechselt (
mehr als 26Hz), dann flackert nix mehr.
damit die leuchtkraft erhalten bleibt, muss man natürlich den LED strom
erhöhen.
mit 4 stück könnte natürlich der led strom zu hoch werden, um
ausreichend leuchtkraft zu bekommen.
die 7 kathoden ( 14 kathode bei 2 anzeigen, wobei beide anzeigen an den
kathoden parallel sind und somit nur ein vorwiderstand dran ist)sind
direkt mit vorwiderständen an dem port vom atmel dran.
die anode schalte ich über einen PNP transitor um.
man muss halt noch ausprobieren, welche hex zahl auf dem port welcher
zahl entspricht, was man dann einfach in einem array speichert.
man könnte auch latchs verwenden, damit die LEDs immer an sind und man
nur die adresse ändert.
fals du es so wie ich mit multiplexen versuchen solltest,
dann nimmt du 3 die du umschaltet und die 1 am anfang schaltest du
einfach nur ein, wenn die benötigt wird.
grüsse

unsigned char
zahlzuport[13]={0x01,0x67,0x14,0x24,0x62,0x28,0x08,0x65,0x00,0x20,0xFF,0 
x7E,0x66};

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
    if((te<-40)||(te>130)||(nodata==1))
  {
    zehner=11;
    einser=11;
         //  PORTD.4=0;
  }
      else
      {
      if(te<0)          //negative werte
      {
        e=te*(-1);
        zehner=11;
      }
      else
        e=te;

      einser=(e%100)%10;      //einsterstellen
      if((e>=10)&&(te>0))               //
        zehner=(e/10)%10;
      else
          if(te<0)
            if(te<-9)
              zehner=12;
            else
                     zehner=11;
          else
           zehner=10;

        }

if(PORTD.6==1)
{
  PORTD.5=1;
  PORTB=zahlzuport[einser];
  PORTD.6=0;
}
else
{
  PORTD.6=1;
  PORTB=zahlzuport[zehner];
  PORTD.5=0;
}
}

PS: die erfahrenen progger mögen mir für diesen code ( einer der ersten
versuche überhaupt) verzeichen, fals der nicht so toll sein sollte

von Michael Knapp (Gast)


Lesenswert?

Hallo Ich habe hier

http://www.mikrocontroller.net/forum/read-4-18926.html

etwas gefunden das mit sicherheit das richtige enthält

doch ich kann aus dem CODE nicht erkennen wie das funktioniert.

http://www.mikrocontroller.net/attachment.php/41680/drehzahl.bas

hier ist der CODE in BASCOM

kann mir das programm jemad näher erleutern ich habe noch karkeine
erfahrung mit programmierung von µC´s.

Michael

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.