Binäruhr programmieren?

trix0matrix9

Neues Mitglied
09. Mai 2010
3
0
0
Sprachen
Hiho,
das ist das erste mal, das ich ein microcontroller programmiere, sprich ich bin ein noob in diesem Bereich. Ich weiß nicht, wie ich mit AVR-Studio arbeiten kann und so. Jetzt will ich ein microcontroller für eine Binäruhr programmieren. Habe schon in google gesucht.
Mein gefundener Code:
Code:
#include <avr/io.h>
#include <avr/wdt.h>

int main(void)
{
wdt_disable();

// Ausgänge definieren
DDRA = 0xff; 	//Alle Pins auf A als Ausgänge definieren
DDRB = 0xff;	//Alle Pins auf B als Ausgänge definieren
DDRC = 0xff;	//Alle Pins auf C als Ausgänge definieren

// Ausgänge auf LOW setzen
PORTA = 0x00;	//Alle Pins auf A auf LOW setzen
PORTB = 0x00;	//Alle Pins auf B auf LOW setzen
PORTC = 0x00;	//Alle Pins auf C auf LOW setzen

//Eingänge definieren für die Einstellung der Uhrzeit
DDRD = 0x00;	//Alle Pins auf D als Eingänge definieren
PORTD = 0x00;	//PullUps deaktiviern


//Interne UHR
//Variablen Definieren
int s1=0;
int s2=0;
int m1=0;
int m2=0;
int h1=0;
int h2=0;

int main (void)
{
  for (;;)
  {
    _delay_ms(1000);
    s1 = s1 + 1;

    if (s1 > 9)
      {
        s2 = s2 + 1;
    	s1 = 0;
      }

    if (s2 = 6)
  	  {
	    m1 = m1 + 1;
	    s2 = 0;
	  }

    if (m1 > 9)
  	  {
	    m2 = m2 + 1;
	    m1 = 0;
	  }

    if (m2 = 6)
  	  {
	    h1 = h1 + 1;
	    m2 = 0;
	  }

    if (h1 > 9) && (h2 < 2)
  	  {
	    h2 = h2 + 1
	    h1 = 0
	  }

    if (h2 = 2) && (h1 < 5)
  	  {
	    h2 = 0;
	    h1 = 0;
	  }

	// Hier kommt noch die Ausgabe
	
  }
}

kann mir jemand erklären 1. ob der code geeignet ist und 2. den code grunzetzlich erklären? da ich da garnichts verstehe (und bin sowieso kein Fan von C&P)

PS: Hoffe habe das richtige Forum gewählt ^^
 
Servus,

herzlich Willkommen erstmal.

Wenn Du noch nicht so viel Erfahrung hast mit den Mikrocontroller, würde ich Dir empfehlen klein anzufangen, sprich erst mit LEDs spielen (ein- und ausschalten, blinken lassen, dimmen, ...), dann mit Taster (Zustand abfragen, entprellen und etc). Wenn Du Dich dann etwas sicherer fühlst, kannst ja weiter machen, mit Interrupts zum Beispiel.

Zum Code: Der Code macht noch nichts, er setzt npaar Ports auf Ausgang und npaar Andere auf Eingang. Dann werden noch die Überläufe abgefragt. Das alles in einer Endlosschleife mit einer 1 Sekunden Pause.

Grüsse
Heinrich
 
okay danke...
gibt es irgendwo bücher, für AVR ???
Halt online, ohne das ich i-was bezahlen muss
 
Hallo,

falls du englisch kannst, dann schau dir einfach mal die originalen Atmel-Datenblätter an, diese kannst du übrigens in unserer Database runterladen.

Nutze auch einmal die Forensuche, es wurde hier schon öfters Literatur für Anfänger empfohlen.

Schaue auch mal in unseren FAQ-Bereich.

Ein C-Tutorial findest du bei unseren Kollegen bei mikrocontroller.net:
AVRGCC-Tutorial


Gruß,
Dirk
 
Hi
Nun ja, den Code zu erklären ist eigentlich einfach. Obwohl ich mich mit C mächtig schwer tu, erkenne ich doch, das die Uhr aus einer Zählung von Sekunden besteht:
S1=S1+1 Erhöhe die Sekunden Einerstelle wenn S1 =9 dann setze die 10Stelle eins hoch und setze die Einerstelle wieder auf 0 usw. Erkennt man eigenlich an den If's im Code.
Nun komm ich mal zu einer anderen Frage : "Kannst du mit C umgehen ?" Das ist die Voraussetzung, um mit C einen µC zu beschreiben. Wenn nicht, kannst du mit Basic umgehen? dann wechsel zu Bascom , wenn nicht bleibt die Frage nach Assembler übrig. Kannst du dies auch nicht, liegt ein weiter Weg des Lernens vor dir. Ich will nicht sagen : "Laß die Finger von und geh lieber mit Mädchen spielen":) , aber die Tutorials bauen schon auf gewisse Grundkenntnis auf. Sind diese nicht vorhanden, wirst du es schwer haben, die Beispiele zu verstehen. Aber vielleicht bist du auch so ein Autodidakt wie ich, dann wünsch ich dir viel Erfolg. Du kannst ja jederzeit nachfragen und in Assembler werd ich dir schon helfen können.
Gruß oldmax
 
Hallo trix0matrix9

Nun komm ich mal zu einer anderen Frage : "Kannst du mit C umgehen ?" Das ist die Voraussetzung, um mit C einen µC zu beschreiben. Wenn nicht, kannst du mit Basic umgehen? dann wechsel zu Bascom , wenn nicht bleibt die Frage nach Assembler übrig. Kannst du dies auch nicht, liegt ein weiter Weg des Lernens vor dir. Ich will nicht sagen : "Laß die Finger von und geh lieber mit Mädchen spielen":) , aber die Tutorials bauen schon auf gewisse Grundkenntnis auf. Sind diese nicht vorhanden, wirst du es schwer haben, die Beispiele zu verstehen.
Da hat Oldmax schon recht. Zumindest ein bisschen Englisch ist nötig um die Hilfen zu verstehen.
Aber vielleicht bist du auch so ein Autodidakt wie ich, dann wünsch ich dir viel Erfolg. Du kannst ja jederzeit nachfragen und in Assembler werd ich dir schon helfen können.
Gruß oldmax
Auch für C und BASCOM habe wir ausgefuchste Profis im Forum.
gibt es irgendwo bücher, für AVR ???
Halt online, ohne das ich i-was bezahlen muss
Falls Du Schüler ohne Taschengeld und Neben-(Ferien)job bist, ist es natürlich etwas schwierig. Online- Bücher gibt es, glaube ich, nicht. Die sollen ja gekauft werden.
Von Marius Meisner gibt es übrigens die deutsche Übersetzung der BASCOM- Hilfe, falls Du mit Basic anfangen möchtest. Machen einige, um dann später auf C oder Assembler umzusteigen. In Bascom kannst Du auch Assembler- Routinen einbauen.

- Mal ganz allgemein:
Sicherlich schmerzt es ein wenig, für drei AVR- Bücher ca. Euro 150 auszugeben. Macht sich aber schnell bezahlt und das zuweilen lästige Hin- und Herklicken entfällt auch.
Vielleicht stehe ich ja allein mit dieser Meinung da, aber das "immer Umsonst haben" ist vielleicht nicht der beste Weg, um ans Ziel zu gelangen. Das gilt auch für Programm- Code. Ich könnte aus allen Foren Schnipsel ziehen und mehr schlecht als recht einen µC zum Laufen zu bringen. Doch hätte ich dann nichts gelernt, wüsste nicht, was ich eigentlich mache. Und Spass macht es dann auch nicht. Selberquälen (Oldmax: autodidaktisch) hat natürlich den "Nachteil", dass alles etwas länger dauert.
Damit es keine Missverständnisse gibt: Bei Verständnis der Materie kann man natürlich den Einen oder Anderen Programmteil kopieren. Wie Dino schon bemerkte: Man muss das Rad nicht jedesmal neu erfinden.

Gut soweit. Soll keine neue Diskussion werden.


Grüsse,

Michael
 
Hi trix0matrix9,

zuerst mal herzlich willkommen :flowers: (wenn ichs noch nicht gesagt hab) ;)

Also am besten erzählst du erst mal was du denn bis jetzt überhaupt
programmiert hast und was denn bei dir schon so an Technik rumfliegt.
Also was für nen Progger (Parallel, USB, ...) usw. Damit man sich ein Bild
machen kann was du zuhause für Voraussetzungen hast. Dann kann man
gezielter helfen wenn was nicht so klappt wie es soll.

Und dann solltest du am besten klein anfangen um in die Materie einzusteigen.
Wenn es mit dem Verstehen gut klappt dann werden die Schritte von sich aus
schnell größer. Das ist dann zwar der lange Weg aber er hat viele Vorteile.

Abkupfern ist keine Sünde :D aber man sollte auch verstehen was da so
abgeht. Einfach so blind abkupfern bringt garnix außer Fragezeichen im Hirn.

Gruß
Dino
 
Hi
Mir geht es oft so, das ich das Wissen der Fragesteller unter- oder überschätze. Ich habe eine solide Elektrikerlehre hinter mir und bin mittlerweile verantwortlich für Programme von Großanlagen. (Siemens S5, S7 etc)
Und steh kurz vor der Rente.....
Der Erfolg im Beruf basiert auf der unendlichen Neugier. Angefangen in den 70ger Jahern mit TTL ( vorher schon Transistorschaltungen aber mehr schlecht als recht...) Dann der Sinclair ZX80 und in Folge der Sharp MZ 731 bis heute die 6. Generation PC's oder ist es schon die 8. Immer vom Spieltrieb motiviert.... das nenn ich Autodidakt. Allerdings, und da hab ich viel Lehrgeld bezahlt, gab es Momente, wo ich zur Problemlösung auch Lektüre brauchte. und das zu einer Zeit, wo Internet noch nicht im Duden stand. Tja, und dann hab ich mir Bücher gekauft, so um die 90 DM und was stand drin ? Der Abklatsch von der Softwaredokumentation. Keine wirklichen Hilfen. Das tut dann schon weh. Ich verstehe daher jeden, der im Netz Informationen sucht und ich bin fest der Meinung, die Foren leisten hier sehr gute Arbeit. Und auch zur Auswahl von Lektüre denk ich, fällt man nicht mehr so einfach auf einen Abklatsch der Softwaredoku rein, wenn hier ein Rat gegeben wird. Zum Thema "für nothing" hätt ich auch noch was zu sagen. Schularbeiten mach ich überhaupt nicht gern und so mancher Fragesteller hält damit noch nicht einmal hinterm Zaun. Anders ist es, wenn einer den Einstieg sucht, sich ein Projekt vornimmt und startet. Es ist gut, auch großes Umsetzen zu wollen. So lernt man auch gleich, das ein Projekt erst in kleine Abschnitte zerlegt werden muß.
Soviel solls erst mal sein, vielleicht erzählst du mal so ein wenig über dein vorhandenes Wissen...
Gruß oldmax
 
Hi trix0matrix9,

schon Vortschritte bei der Programmierung ? oder noch am stöbern in den
Tutorials ;) Melde dich wenns Probleme gibt. Mit mehreren Leuten läßt sich
der Groschen eher zum fallen überreden :D

Gruß
Dino
 
Hi
Ich glaub, ich bab trix0matrix9 verschreckt... :cool:
oder er macht grad eine Lehre zum Elektriker :eek:
Aber vermutlich gönnt er sich ein paar forumfreie Tage :)
Gruß oldmax
 
ich werde auch als nächstes projekt ne binäruhr machen denke ich
, hab mit vb mal ne kleine gliederung gemacht ich denke so wirds gehen
h,m,s in binäre zahlen umwandeln
sieht dann ungef#hr so aus 11000 h usw.
länge des strings feststellen
dann einfach ne kleine for each schleife,.
for i=stringlänge-1 to 0 step-1
den string durcharbeiten und dann wenn ne 1 da steht die passende led anschalten,.
next

obs geht ka, aber rein von der überlegung her,...
 
Hallo,

for i=stringlänge-1 to 0 step-1
den string durcharbeiten und dann wenn ne 1 da steht die passende led anschalten,.
was für ne komplizierte Lösung :D
Die Ausgangsregister machen das doch alles schon von alleine.
zB ...
Am PC0 die Led für die Einer
Am PC1 die für die Zweier
Am PC2 die für die Vierer
Am PC3 die ...
Am ...
Wenn man jetzt zB den Dezimalwert 7 in PortC reinlädt dann leuchten die
Leds an den Pins 0, 1 und 2. Also macht der Ausgangsport für euch die
Wandlung von Dezimal nach Binär. Ohne irgendeine Schleife :cool:

Denkt doch nicht so kompliziert. Beim Computer ist alles identisch.
Binär = Dezimal = Hex = Octal = Character
Man gibt den Bits nur ne anderen Namen.

Gruß
Dino
 
ja, aber dann musste die vorgegebenen ports bzw leds an die vorgegebenen anschlüsse anschliessen, anders kann man sie halt selbst bestimmen,.
 
Hi,

ja, aber dann musste die vorgegebenen ports bzw leds an die vorgegebenen anschlüsse anschliessen, anders kann man sie halt selbst bestimmen,.
da hast du sicherlich recht. Aber wie heißt das so schön ... Planung ist alles ;)
Und wenn man ein paar Minuten länger plant kann man sich ein vielfaches der
Planungszeit sparen. Und wenn man was selber baut kann man es ja so
machen wie man es möchte. Außerdem liegen die Bits beim Atmel relativ gut
sortiert an den IC-Pins. Also wird es bei den LEDs kaum Leitungskreuzungen
geben. Und wenn man kreuzen muß dann kann man das elegant unter den
Vorwiderständen erledigen :D

Aber im Endeffekt muß es nur funktionieren. Wie man es löst bleibt einem
selbst überlassen. Wie heißt es so schön ... viele Wege führen nach Rom ;)

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)