Forum: Mikrocontroller und Digitale Elektronik Mit Atmega8 eine PLL binär hoch zählen


von Oliver B. (oliver-b)


Lesenswert?

Erstmal HALLO! Liebes Forum :)
Ich bin noch der totale Noob mit diesen Atmels, aber habe ein STK500 in 
meinem Bestand und schon das ein oder andere mal rüber geschoben auf den
kleinen Atmega8, so als Test.

Jetzt möchte ich mal was einfaches probieren, also für euch sicher ein 
Witz, aber für mich leider nicht.
Ich habe noch eine alte PLL mit einem 10240Khz Quarz, welche 512 
Teilerstufen besitzt, jene Teilerstufen werden binär über 9 Eingänge 
definiert. Ich würde gerne diese PLL mit dem Atmega8 binär in 512 Stufen 
hoch zählen und das ganze am besten über eine Art Tabelle, die ich 
erstmal über Up und Down Tasten hoch und runter fahren kann sprich:
Ich müßte eine Wertetabelle erstellen können, mit 512 Kombinationen, 
bestehend aus jeweils 9 Zuständen, die sich dann an 9 Ausgängen
als Low und High Kombinationen ergeben.

Ich finde da einfach keinen verständlichen Ansatzpunkt.
Ich wäre über, jede Information, ähnliche Projekte, Quellen und auch 
fertige Variationen dankbar.

Später möchte ich evtl. noch ein Display dazu verwenden, aber zuerst 
zählt mal ein kleiner Einstieg

von Karl H. (kbuchegg)


Lesenswert?

Oliver Benedix schrieb:

> Ich finde da einfach keinen verständlichen Ansatzpunkt.
Wenn dir das Schwierigkeiten bereitet, dann bedeutet das, dass die 
Aufgabenstellung (so einfach sie auch klingen mag) für dich noch viel zu 
komplex ist.

Du musst mit noch einfacheren Dingen anfangen.
Ein bewährter Ansatzpunkt ist es, an den Mega einfach mal an einen Port 
8 LED anzuschliessen und mit der Ausgabe auf diesen Port zu beginnen.

Alles was du dazu brauchst findest du in den Tutorien
AVR-Tutorial
AVR-GCC-Tutorial

Erst dann, wenn du mit zb 8 LED gezielt Muster erzeugen kannst (und 
dabei dein 'Wissen' über Zahlen wieder auf neuesten Stand gebracht hast) 
geht es zb mit Tastern weiter.

Auch ist die Lektüre eines C-Buches (wenn du in C programmieren willst) 
dringend angeraten, samt Übungen auf dem PC. Tabellen sind in C ganz 
einfach Arrays und wenn dir dieses Konzept erst mal nichts sagt, dann 
sagt mir das, dass du in C ganz vorne anfangen musst.

von Oliver B. (oliver-b)


Lesenswert?

Ok, so fange ich mal an :)
Das hat es wohl auf den Kopf getroffen.
Wenn allerdings noch jemand ein Beispiel findet,
was ich parallel dazu einfach mal anschauen kann, dann
laßt es mich wissen. Der Thread ist gebookmarkt.

Danke

von Karl H. (kbuchegg)


Lesenswert?

Oliver Benedix schrieb:

> Wenn allerdings noch jemand ein Beispiel findet,
> was ich parallel dazu einfach mal anschauen kann,

Mit den richtigen Hilfsfunktionen ist die Aufgabenstellung relativ 
trivial
(die wichtigste 'Hilfsfunktinoalität' ist eine zuverlässige Entprellung. 
Ich verwende generell die PeDa Methode)

Der Kern deines Pgm sieht dann so aus
1
....
2
uint8_t Table[] =
3
  { 0x00, 0x01, 0x02, 0x03, ....
4
  };
5
6
7
8
void OutputValue( uint16_t Value )
9
{
10
  PORTB = Value;           // die 8 unteren Bits
11
12
  PORTD &= ~(0x01);                 // und noch das 9. Bit an einem anderen Port, Bit 1
13
  PORTD |= Value >> 8;
14
}
15
16
int main()
17
{
18
  uint16_t EntryNr;
19
20
  ... Vorgeplänkel zum Einstellen zb eines Timers für die Entprellung
21
  ... Datenrichtungsregister, etc.
22
23
  EntryNr = 0;
24
25
  sei();
26
27
  while( 1 ) {
28
29
    if( get_key_press( 1 << UP ) ) {
30
      if( EntryNr < sizeof(Table)/sizeof(*Table) - 1) {
31
        EntryNr++;
32
        OutputValue( Table[ EntryNr ] );
33
      }
34
    }
35
36
    if( get_key_press( 1 << DOWN ) ) {
37
      if( EntryNr > 0 ) {
38
        EntryNr--;
39
        OutputValue( Table[ EntryNr ] );
40
      }
41
    }
42
  }
43
}

von MWS (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> uint8_t Table[512] =
>   { 0x00, 0x01, 0x02, 0x03, ....
>   };

Um für 9 Eingänge in der PLL 512 Zustände zu haben, braucht er sicher 
keine Tabelle. :D

von Karl H. (kbuchegg)


Lesenswert?

MWS schrieb:
> Karl Heinz Buchegger schrieb:
>> uint8_t Table[512] =
>>   { 0x00, 0x01, 0x02, 0x03, ....
>>   };
>
> Um für 9 Eingänge in der PLL 512 Zustände zu haben, braucht er sicher
> keine Tabelle. :D

:-)

Das soll er sich dann selber überlegen, wie er das machen will.
Aber ich vermute mal die Forderung nach einer Tabelle kam nur deshalb, 
weil er den Zusammenhang einer Zahl zu ihrer binären Darstellung, und 
das er die unmittelbar direkt verwenden kann, noch nicht kennt. Daher: 
Lauflichter machen einem das alles ziemlich unmittelbar klar

Wird ja schliesslich auch eine enorme Tipporgie auf "UP" wenn er einen 
von den höheren Teilern benutzen will. Aber auch das kriegt er noch 
raus, das er beim Thema Benutzerfreundlichkeit nach nachlegen muss :-)

von Oliver B. (oliver-b)


Lesenswert?

Entprellung ist sehr wichtig, sonst zappelt der Zähler :)
Das kenne ich von anderen Logik Gattern.
Danke für den Ansatz.

Warum ich nach der Tabelle frage liegt einfach daran, das es zur PLL hin 
den späteren Wunsch gibt, auf bestimmte Kanal-Anomalien einzugehen, oder 
gewisse Kombinationen zählen zu können, die beim normalen Hochzählen die 
falsche Reihenfolge hätten. Für den Anfang genügt es aber, erstmal eine 
normale Reihenfolge binär auszugeben.
Default sind die PLL-Eingänge auf internem Pull Down, ich brauche also 
als Ausgabe später 9x High.
Ich lese mal weiter...

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.