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
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.
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
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 | }
|
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
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 :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.