www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Micropersonalcomputer


Autor: Halgn H. (Gast)
Datum:
Angehängte Dateien:
  • pc.rar (620 KB, 71 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich möchte fragen ob ich das so richtig gemacht hab.

Ich hab gedacht das ich das mit SD mache aber ein Atmega8 kann das nicht 
leisten allso hab ich SEHR lange überlegt. Dann kam ich auf die idee das 
man immer 4 Bit sendet die dan gelesen werden :D

Auf Board sind 2 LED's. Eine an PC0 und eine PB6 zu masse.

Anfangs ging es nicht nun geht es. Die werden durch 4 Schalter gelesen 
wenn man Knopf zum Lesen drückt. PC1 ist der Knopf PC2 bis PC5 sind die 
schalter.

Es wird 2 mal gelesen um eine Funktion zu starten.
z.B.
1000 0000 } befehl: LED  an

Bis jetzt hab ich 3 Funktione:
0000 0000 LED aus
1000 0000 LED an
1111 1111 Conntroller schaltet sich aus

Nun ist mein conntroller 79% voll und weiß nciht wiso... so viel code 
ist das nicht oder? Ich will nur wissen ob ich es richtig gemacht hab 
und wie ich weiter machen soll. Endweder ein Atmega168 kaufen oder Code 
Optemieren...denn es kommt noch viel dazu

: Verschoben durch Moderator
Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander Ljubizki schrieb:

> Nun ist mein conntroller 79% voll und weiß nciht wiso... so viel code
> ist das nicht oder?

Du hast den ganzen LCD Code noch im Projekt, den kein Mensch braucht.
Auch nicht aufgerufene Funktionen benötigen Platz.

Und der Rest.
Im Prinzip hast du recht, so kompliziert ist dein Programm nicht. Es ist 
nur kompliziert geschrieben

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber hier steckt dein Haupt-Codefresser
void LED(int On, int Loop, int MS)
{
  if(Loop)
  {
    while(Loop)
    {
      PORTC |= (1 << PC0); //An
      _delay_ms(MS);
      PORTC &= ~(1 << PC0); //Aus
      _delay_ms(MS);
      Loop--;
    }
  }
  else
  {
    if(On)
      PORTC |= (1 << PC0); //An
    else
      PORTC &= ~(1 << PC0); //Aus
  }
}

_delay_ms niemals mit einer Variablen aufrufen:
* das zieht die komplette Floating Point Library mit ins Boot
* die angestrebten Wartezeiten sind damit illusorisch. Da der
  Optimizer die Berechnungen nicht optimieren kann, dauern die
  Berechnungen selber dann schon fast so lang oder noch länger
  als die angestrebte Wartezeit.

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Mega 8 ist nicht wirklich der Typ, womit man ein Design startet. 
Ausser die gesparten 20cents bringen ein gutes Gefuehl. Wenn man ein 
printf() im Code hat, ist der Speicher eigentlich schon voll. Ein ASM 
Listing des Codes zeigt wofuer wieviel Platz draufgeht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey noch Was schrieb:
> Ein Mega 8 ist nicht wirklich der Typ, womit man ein Design startet.


Na ja.
Wenn die AUfgabe darin besteht 5 Eingänge zu überwachen und abhängig vom 
Zustand dieser Eingänge einen oder 2 Ausgänge ein oder aus zu schalten, 
dann ist im Grunde selbst ein Mega8 schon hoffnungslos 
überdimensioniert.

Und um mehr gehts hier nicht. Zumindest hab ich mir das aus Code und 
Begleittext zusammengereimt :-)

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht mal dann. Denn naechstens kommt der Wusch nach einem Delay, dann 
dieses, dann Jenes. Ich wuerd einen Mega8 nicht mal fuer eine 100er 
Serie einsetzen. Die Ersparnis gegenueber einem Mega16 ist zu gering.

Autor: Halgn H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Aber hier steckt dein Haupt-Codefresser
>
>
> void LED(int On, int Loop, int MS)
> {
>   if(Loop)
>   {
>     while(Loop)
>     {
>       PORTC |= (1 << PC0); //An
>       _delay_ms(MS);
>       PORTC &= ~(1 << PC0); //Aus
>       _delay_ms(MS);
>       Loop--;
>     }
>   }
>   else
>   {
>     if(On)
>       PORTC |= (1 << PC0); //An
>     else
>       PORTC &= ~(1 << PC0); //Aus
>   }
> }
> 
>
> _delay_ms niemals mit einer Variablen aufrufen:
> * das zieht die komplette Floating Point Library mit ins Boot
> * die angestrebten Wartezeiten sind damit illusorisch. Da der
>   Optimizer die Berechnungen nicht optimieren kann, dauern die
>   Berechnungen selber dann schon fast so lang oder noch länger
>   als die angestrebte Wartezeit.

Wau das brigt ja 30% mehr speicher frei O.o
Jetzt überlege ich grad ob ich auf Atmega168 oder Atmega16 gehen soll.

Ich werde jetzt erstmal alle tutorials auf diser homepage lesen um die 
"resourcen" fresser zu töten.

DANKE an alle ich dachte am anfang das ihr mich auslacht :C

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey noch Was schrieb:
> Nicht mal dann. Denn naechstens kommt der Wusch nach einem Delay, dann
> dieses, dann Jenes. Ich wuerd einen Mega8 nicht mal fuer eine 100er
> Serie einsetzen. Die Ersparnis gegenueber einem Mega16 ist zu gering.

Er wird schon seinen Grund für den 8-er haben. Vielleicht hat er auch 
einfach nur welche rumliegen.

Sein Programm in der jetzigen Form lastet den 8-er noch nicht einmal zu 
10% aus. Da ist noch massig Platz für Erweiterungen.

Ich verbau auch gerne die 16-er. Aber wenn ein 8-er locker ausreicht und 
ich einen rumliegen hab, dann nehm ich den auch.

Auf jeden Fall ist sein Programm in der jetzigen Form (und auch das was 
in 2 Wochen noch daraus entstehen kann) noch lange kein Grund die 
Diskussion in Richtung größerern Prozessor zu lenken. Die Grenze ist 
noch so weit weg, dass das einfach die falsche Richtung ist. Sauber 
programmieren allerdings wäre die richtige Richtung. IMHO natürlich.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey noch Was schrieb:
> Ich wuerd einen Mega8 nicht mal fuer eine 100er
> Serie einsetzen. Die Ersparnis gegenueber einem Mega16 ist zu gering.

Da gibts aber immer noch die Hobbybastler, die lieber DIP statt SMD 
löten. Und für die ist ein Mega 8 rein äusserlich doch erheblich 
kleiner, als ein Mega16.

Oliver

Autor: Halgn H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver schrieb:
> Hey noch Was schrieb:
>> Ich wuerd einen Mega8 nicht mal fuer eine 100er
>> Serie einsetzen. Die Ersparnis gegenueber einem Mega16 ist zu gering.
>
> Da gibts aber immer noch die Hobbybastler, die lieber DIP statt SMD
> löten. Und für die ist ein Mega 8 rein äusserlich doch erheblich
> kleiner, als ein Mega16.
>
> Oliver

Karl heinz Buchegger schrieb:
> Hey noch Was schrieb:
>> Nicht mal dann. Denn naechstens kommt der Wusch nach einem Delay, dann
>> dieses, dann Jenes. Ich wuerd einen Mega8 nicht mal fuer eine 100er
>> Serie einsetzen. Die Ersparnis gegenueber einem Mega16 ist zu gering.
>
> Er wird schon seinen Grund für den 8-er haben. Vielleicht hat er auch
> einfach nur welche rumliegen.
>
> Sein Programm in der jetzigen Form lastet den 8-er noch nicht einmal zu
> 10% aus. Da ist noch massig Platz für Erweiterungen.
>
> Ich verbau auch gerne die 16-er. Aber wenn ein 8-er locker ausreicht und
> ich einen rumliegen hab, dann nehm ich den auch.
>
> Auf jeden Fall ist sein Programm in der jetzigen Form (und auch das was
> in 2 Wochen noch daraus entstehen kann) noch lange kein Grund die
> Diskussion in Richtung größerern Prozessor zu lenken. Die Grenze ist
> noch so weit weg, dass das einfach die falsche Richtung ist. Sauber
> programmieren allerdings wäre die richtige Richtung. IMHO natürlich.

Ja genau wegem dem Gründen nehme ich ein Atmega8 in anspruch. Und da 
kommt wie frage wiso so viele Pinns=?

22 Pins reichen mir: 5 LCD 5 Festplatte 5 Tastatur(5 Pins  5 pins  1 
Bit = 25 Schaltreihenmöglichkeiten :D A-Z + ÄÖÜ) 2 RS232 2 Led's

So ich werde nun jeden Sonntag mal hier mein zwischen bericht 
presentieren(und vl. nehme ich den Atmega168 :D ist 100 % gleich wie 
Atmega8 nur mit 16 KB speicher)

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> und vl. nehme ich den Atmega168 :D ist 100 % gleich wie
> Atmega8 nur mit 16 KB speicher

Der ATmega168 ist deutlich weg von „100% gleich“ zum ATmega8.  Das wäre 
der ATmega88.

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.