Forum: Mikrocontroller und Digitale Elektronik Micropersonalcomputer


von Halgn H. (Gast)


Angehängte Dateien:

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 User
von Karl H. (kbuchegg)


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

von Karl H. (kbuchegg)


Lesenswert?

Aber hier steckt dein Haupt-Codefresser
1
void LED(int On, int Loop, int MS)
2
{
3
  if(Loop)
4
  {
5
    while(Loop)
6
    {
7
      PORTC |= (1 << PC0); //An
8
      _delay_ms(MS);
9
      PORTC &= ~(1 << PC0); //Aus
10
      _delay_ms(MS);
11
      Loop--;
12
    }
13
  }
14
  else
15
  {
16
    if(On)
17
      PORTC |= (1 << PC0); //An
18
    else
19
      PORTC &= ~(1 << PC0); //Aus
20
  }
21
}

_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.

von Purzel H. (hacky)


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.

von Karl H. (kbuchegg)


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 :-)

von Purzel H. (hacky)


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.

von Halgn H. (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Aber hier steckt dein Haupt-Codefresser
>
>
1
> void LED(int On, int Loop, int MS)
2
> {
3
>   if(Loop)
4
>   {
5
>     while(Loop)
6
>     {
7
>       PORTC |= (1 << PC0); //An
8
>       _delay_ms(MS);
9
>       PORTC &= ~(1 << PC0); //Aus
10
>       _delay_ms(MS);
11
>       Loop--;
12
>     }
13
>   }
14
>   else
15
>   {
16
>     if(On)
17
>       PORTC |= (1 << PC0); //An
18
>     else
19
>       PORTC &= ~(1 << PC0); //Aus
20
>   }
21
> }
22
>
>
> _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

von Karl H. (kbuchegg)


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.

von Oliver (Gast)


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

von Halgn H. (Gast)


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)

von Hc Z. (mizch)


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.

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
Noch kein Account? Hier anmelden.