mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik HILFE gesucht - ATmega16


Autor: Paul* (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche grade auf einer selbst zusammengelöteten Platine
(Schaltplan siehe Anhang) eine Aufgabe zu lösen, komme allerdings
überhaupt nicht voran, da ich keine Ahnung von C-Programmierung oder
auch von Mikrocontrollern habe. Vielleicht kann mir ja jemand helfen -
habe auch schon mal ein Probeprogramm (Lauflich mit AD-Wandler) laufen
lassen, verstehe dabei aber auch schon (mangels Kenntnissen) wie das
genau arbeitet.

Die beiden angegebenen Funktionen sollen gemeinsam im Atmega16 des
Demo-Boards realisiert werden! Die Beschreibung der Funktionalität soll
in der Programmiersprache C erfolgen!

Realisieren eines Lauflichts:
Mit einem der beiden Potentiometer soll die Frequenz (Weiterschaltung
von einem Status in den folgenden Status) des Lauflichts im Bereich von
0Hz (Stillstand) bis 2Hz (Genauigkeit: +/-0,1Hz) möglichst fließend
einstellbar sein. Die Taktung soll mit Hilfe von einem der eingebauten
Timer realisiert werden und es soll mindestens eine zugehörige
Interruptserviceroutine sinnvoll verwendet werden! Hierzu soll
mindestens mit einer Genauigkeit von 10 Bit gearbeitet werden. Durch die
Schalter 1 (Bit 0) und 2 (Bit 1) (Beschriftung beachten!) sollen die
verschiedenen Darstellungen des Lauflichts ausgewählt werden können. Ist
ein weiterer Schalter aktiviert soll die Funktionalität des Lauflichts
deaktiviert sein um eine Nutzung der LED's für andere Aufgaben zu
ermöglichen. Bei
Umschaltung soll das nun ausgewählte Lauflicht, beginnend im ersten
Zustand, in der beschriebenen Abfolge mit der eingestellten Frequenz
durchlaufen werden.
Diese seien wie folgt belegt1 :
„00“: „+-------“ → „-+------“ → „--+-----“ → „---+----“ → „----+---“ →
„-----+--“ → „------+-“ → „-------+“ → usw. mit „+-------“
„01“: „+------+“ → „-+----+-“ → „--+--+--“ → „---++---“ → „--+--+--“ →
„-+----+-“ → „+------+“ → „--------“ → usw. mit „+------+“
„10“: „++------“ → „-++-----“ → „--++----“ → „---++---“ → „----++--“ →
„-----++-“ → „------++“ → „-----++-“ → „----++--“ → „---++---“ →
„--++----“ → „-++-----“ → usw. mit „++------“
„11“: „+-------“ → „++------“ → „+++-----“ → „++++----“ → „+++++---“ →
„++++++--“ → „+++++++-“ → „++++++++“ → „-+++++++“ → „--++++++“ →
„---+++++“ → „----++++“ → „-----+++“ → „------++“ → „-------+“ →
„--------“ → usw. mit „+-------“
Grundeinstellung: Zu Beginn sei die mit S7 gewählte Variante
voreingestellt!

Realisieren einer Addition:
Ist das Lauflicht nicht aktiv sollen die Stellungen beider Potentiometer
zyklisch, in der zugehörigen Interruptserviceroutine, mit einer
Genauigkeit von 7 Bit ermittelt werden. In der Hauptroutine der zu
entwickelnden Software sollen diese Werte nun addiert werden. Das
Ergebnis
der Addition dieser beiden 7-Bit-Zahlen soll über die 8 LED's ausgegeben
werden. Das Leuchten einer LED signalisiert dass dieses Bit gesetzt ist!

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Crosspost

Autor: Marvin M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist eine lösbare Aufgabe.

Ich frage mich gerade, warum Du eine solche Aufgabe lösen willst, wenn 
Du keine Ahnung von nichts hast... Aber mit etwas Fleiß kriegen wir das 
durchaus hin.

Wo genau verstehst Du die Beispielcodes nicht?
Hast Du gar keine Erfahrung mit Programmiersprachen oder ist nur C das 
Problem?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Hausaufgaben?

MfG Spess

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@ Paul:
Du hast Glück. Mit dem uC kannst du das schaffen.
Mach mal irgendwas, und schreib dann, was noch nicht geht.
Die ganze Arbeit nimmt dir hier auch keiner ab.

BTW:
Pete hats da mit seinen 72 Flipflops wesentlich schwerer :-o

Autor: Paul* (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe bisher eigentlich nur wenig mit Programmiersprachen am hut gehabt. 
Und mit C eben noch gar nichts =/

Autor: Paul* (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bisher bin ich so weit, bin aber auch noch nicht ganz da durchgestiegen, 
warum hier was passiert:

#include <avr/io.h>      // Package IO einbinden
#include <util/delay.h>      //
#include <avr/interrupt.h>    // Einbindung von Interrupt Package

volatile int counter = 0;
volatile int counter_max = 1000;

int main (void)
{
  int ledcnt = 0;


  DDRC = 0xff;       // Initialisierung von C -- Port C Data Direction 
Register (DDRC) - 0xff = maximum


  ADMUX = 0x06;      // ADC einstellen und starten
  ADCSRA = 0xFE;

  TCCR0 = 0x05;      // Timer 0 einstellen und starten
  TIMSK = 0x01;
  TCNT0 = 0xe9;

  sei();        // Beginn des Interrupts

  PORTC = 0xff;      // Initialisierung von Port C

  while(1)      // Endlosschleife
  {
    if( counter >= counter_max )
    {
      counter = 0;
      ledcnt++;
      PORTC = ~( 1 << ( ledcnt & 0x07 ) );
    }
  }
}

ISR(ADC_vect)        // Interrupt System Routine
{

  counter_max = ( ADC + 10 ) << 1;      // Ergebnisausgabe von ADCHigh 
auf C
}

ISR(TIMER0_OVF_vect)
{
  TCNT0 = 0xea;
  counter++;
}

Autor: Marvin M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Code ist doch sehr schön kommentiert.
OK, die Zeile
PORTC = ~( 1 << ( ledcnt & 0x07 ) );
wird ein C-Anfänger nicht verstehen, das gebe ich zu.
Im Prinzip kann man die Aufgabe durch Erweiterung dieses Codes lösen.
Bevor ich jetzt hier viel, sehr viel schreibe, arbeite dies hier durch: 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Detailfragen können wir sicher klären.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.