Stap 8: tellers
Een teller is register dat wordt verhoogd of verlaagd op periodieke basis. We gebruiken drie items in ons systeem. De eerste twee zijn zeer vergelijkbaar. Zij zijn de teller van de horizontale en de verticale teller. In ons systeem hebben we een vooraf gedefinieerde waarde die ze maximaal rekenen. Wanneer ze de waarde die is opgegeven wordt bereikt, sturen ze een controle-signaal naar de FSM die vervolgens deactiveert de huidige teller en activeert de volgende dia. De teller die is geactiveerd telkens nadat de teller van de horizontale en de verticale teller verhogen hebt en hun waarde bereiken heet de max teller.
De max teller module is de teller die gedurende de hele tijd die het kalibreren van het systeem verhoogd. De verhogingen van de teller door een telkens als het gaat door de stijgende rand van het kloksignaal. Wanneer een nieuwe max waarde wordt gedetecteerd door de comparator, signaal het een reset naar de max teller. Wanneer dit gebeurt, wordt het huidige aantal dat de max teller opnieuw is opgestart terug naar nul en blijft verhogen totdat de horizontale of verticale teller op het einde van zijn cyclus sweep. Zodra de horizontaal/verticaal teller klaar verhoogd is, oorzaken de controle-signaal vervolgens de max teller beginnen te verlagen. Terwijl de max teller verlagen is, is het een controle signaal aan de FSM die de servo terug in de richting van de max spanning beweegt. Wanneer de max teller is voltooid verlagen, zal de servo zijn teruggekeerd het zonnepaneel naar de plaats waar de laatste max spanning was.
Hier is een beschrijving van de entiteit van onze items horizontaal en Max:
entiteit horiz_counter is
Poort (CLK: in STD_LOGIC;
HS: In STD_LOGIC;
CNT_L: Uit de STD_LOGIC);
einde horiz_counter;
entiteit max_counter is
Poort (CLK: in STD_LOGIC;
FSM_RST: In STD_LOGIC;
RESET: In STD_LOGIC;
MC: In STD_LOGIC;
CNT_RU: Uit de STD_LOGIC);
einde max_counter;
De teller van de horizontale en de verticale teller zijn in wezen hetzelfde, maar ze tot verschillende waarden, verhogen omdat het langer duurt om te doen de horizontale vegen dan de verticale sweep. Ook hoeven niet elke reset-signalen en ze zal altijd verhoogd tot hun opgegeven waarde opnieuw.
De max teller is een beetje complexer. Het heeft twee verschillende reset signalen. Komt uit de comparator zodat de teller kan worden teruggezet wanneer de spanning van de max is gevonden. De andere vorm de FSM komt en is alleen actief wanneer het systeem in de handmatige modus, is omdat we niet dat het om te tellen wanneer we niet proberen willen te vinden van de maximale spanning.
Hier is een gedragsmatige beschrijving voor de max teller:
variabele currcount: STD_LOGIC_VECTOR(12 downto 0): = "0000000000000";
Als RESET = '1' of FSM_RST = '1' then
currcount: = "0000000000000";
CNT_RU < = "0";
elsif Rising_Edge(CLK) dan
als MC = "0" then
currcount: = currcount + 1;
CNT_RU < = "0";
elsif MC = '1' then
currcount: = currcount - 1;
Als currcount = "000000000000" then
CNT_RU < = "0";
anders
CNT_RU < = '1';
einde als;
einde als;
einde als;