µC Lernpaket (SCHÄM)

Fragen zu Schaltungen, Elektronik, Elektrik usw.

Moderator: T.Hoffmann

Kleine Leuchte
User
User
Beiträge: 38
Registriert: Mi, 08.12.10, 09:56

Fr, 12.08.11, 21:40

Hallo

es gibt Neuigkeiten!
Habe mich nach relativ langer Zeit entschieden mir ein EvalBoard zu kaufen.
Meine Wahl war nicht wirklich schwer, da ich mir vor dem Lernpaket schon diverse Eval- und Programmer Board's
angesehen hatte.

Meine Wahl fiel letztlich auf dieses hier > http://shop.myavr.de/index.php?sp=artic ... p&artID=40!
Mit dazu gab's das hier > http://shop.myavr.de/index.php?sp=artic ... p&artID=48!

Hoffe das ich mit dem Board und enthaltenem µC dann weiter komme.
Zumindest sind mehrere µC möglich und damit,denke ich, ein paar Möglichkeiten mehr! :roll:

MFG
Kleine Leuchte
User
User
Beiträge: 38
Registriert: Mi, 08.12.10, 09:56

Mi, 14.09.11, 20:55

Hallo Leute

hätte mal ne Frage.

Habe mir jetzt ne Schaltung gebaut, die einem Pace Car Dachbalken sehr änhlich sieht!
Die Schaltung umfasst:
1x atTiny 13
1x Festspannungsregler 78L05
4x npn OPEN COLLECTOR Transistor BC 547 C
4x Widerstand 10 K als Basiswiderstand für Transistor
8x Widerstand 70 Ohm als Vorwiderstand für Led
16x Led weiß 18000mcd

Habe jetzt 4 Kanäle mit je 4 Led!
Die 4 Kanäle sind PB1 - PB4.
Momentan habe ich also ein 4 Kanal Lauflicht mit 16 Led.
Das Programm dazu sieht so aus

void (main) void
{
int n;
DDRB = 0x01F
while (1)
{
PORTB = 2;
for (n = 0; n <1250; n++);
PORTB = 0;
for (n = 0; n <9000; n++);
PORTB = 2;
for (n = 0; n <1250; n++);
PORTB = 0;
for (n = 0; n <9000; n++);
PORTB = 4;
for (n = 0; n <1250; n++);
PORTB = 0;
for (n = 0; n <9000; n++);
PORTB = 4;
for (n = 0; n <1250; n++);
PORTB = 0;
for (n = 0; n <9000; n++);
PORTB = 8;
for (n = 0; n <1250; n++);
PORTB = 0;
for (n = 0; n <9000; n++);
PORTB = 8;
for (n = 0; n <1250; n++);
PORTB = 0;
for (n = 0; n <9000; n++);
PORTB = 16;
for (n = 0; n <1250; n++);
PORTB = 0;
for (n = 0; n <9000; n++);
PORTB = 16;
for (n = 0; n <1250; n++);
PORTB = 0;
for (n = 0; n <9000; n++);
}
return 1;
}

Möchte jetzt ein Leuchtmuster programmieren welches so aussehen soll:

PORTB 2 = Led 1
PORTB 4 = Led 2
PORTB 8 = Led 3
PORTB 16 = Led 4

1. LED 1 an alle anderen aus
2. LED 2 an alle anderen aus
3. LED 3 an alle anderen aus
4. LED 1 - 4 Doppelblitz

Darf das Programm für Schritt 4 so aussehen ?

PORTB = 2,4,8,16;
for ( n = 0; n < 1250; n++);
PORTB = 0;
for ( n = 0; n < 9000; n++);


Danke

MFG
Kleine Leuchte
User
User
Beiträge: 38
Registriert: Mi, 08.12.10, 09:56

Do, 15.09.11, 17:07

Hallo

Will meinen µC nicht brate also hat denn
keiner nen Hinweis für mich?

MFG
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Do, 15.09.11, 20:06

Also braten kann man den selbst mit einem kompletten 'Müll-Programm' nicht :)
Höchstens ein wenig überlasten, wenn man z.B. einen Eingang (die werden meist gegen Masse geschaltet) als Ausgang definiert und diesen Ausgang dann per Taster oder Schalter mit Masse verbindet. Aber auch das ist dann eher ein 'elektrischer' Fehler...
Wie schon mal erwähnt ist C nicht meine Muttersprache, daher muss ich jedes mal die Syntax nachschauen.
Dazu bin ich aber auch manchmal zu faul.
Ich kann mir aber nicht vorstellen, dass C so was 'versteht':
PORTB = 2,4,8,16;

Eher würde ich es mit:
PORTB = 30;
versuchen. Man kann die Bits einfach 'zusammenzählen'!
Ob das Timing
for ( n = 0; n < 1250; n++);
sinnvoll ist, kann ich nicht beurteilen.
Benutzeravatar
CRI 93+ / Ra 93+
Auserwählter
Auserwählter
Beiträge: 2801
Registriert: So, 19.10.08, 23:56
Wohnort: Hannover

Fr, 16.09.11, 08:21

C versteht sowas tatsächlich nicht und eine leere For-Schleife würde a) üblicherweise komplett wegoptimiert werden, aber b) bei nur 1250 durchläufen mit einem ATMega vermutlich ca. 5000 Taktzyklen dauern, bei 8 MHz also eine 1600tel Sekunde...
In der gcc-Toolchain gibt's dafür die Funktion _delay_ms( float ), die man benutzen sollte, wenn man sinnlos CPU-Zeit verdaddeln will. (die liefert aber nur korrektes Timing mit aktivierten Optimierungen und nur ohne oder mit sehr geringer Interrup-Last, aber Du hast ja ohnehin keine Interrupts in Deinem Programm)
Kleine Leuchte
User
User
Beiträge: 38
Registriert: Mi, 08.12.10, 09:56

Fr, 16.09.11, 12:01

Hallo

und Danke euch beiden!
Wenn ich also richtig liege sollte bzw. muß mein Programm so aussehen:

void (main) void
{
int n;
DDRB = 0x01F
while (1)
{
PORTB = 2; Led1 an
for (n = 0; n <1250; n++);
PORTB = 0; Led1 aus
for (n = 0; n <9000; n++);
PORTB = 4; Led2 an
for (n = 0; n <1250; n++);
PORTB = 0; Led2 aus
for (n = 0; n <9000; n++);
PORTB = 8; Led3 an
for (n = 0; n <1250; n++);
PORTB = 0; Led3 aus
for (n = 0; n <9000; n++);
PORTB = 30; alle Led an
for (n = 0; n <1250; n++);
PORTB = 0; alle Led aus
for (n = 0; n <9000; n++);
PORTB =30; alle Led an
for (n = 0; n <1250; n++);
PORTB = 0; alle Led aus
for (n = 0; n <9000; n++);
}
return 1;
}

MFG
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Fr, 16.09.11, 12:21

Ja. Wie gesagt, ob die Zeitschleifen so passen, kann ich nicht sagen, aber das hast Du vmtl. ja schon mal ausprobiert...
Kleine Leuchte
User
User
Beiträge: 38
Registriert: Mi, 08.12.10, 09:56

Fr, 16.09.11, 21:27

Hallo nochmal,

@ Borax

die Zeitschleifen musste ich schon noch ein wenig anpassen, aber jetzt tut alles sehr gut und ist stabil am laufen!
Wenn du dir ungefähr nen Bild machen willst wie's aussieht, dann schau mal bei youtube nach Video's
wo das DELFIS Warnlichtsystem für RTW gezeigt wird.

Ansonsten war(ist) nur zu beachten, dass erst ALLE 4 Schritte geproggt werden müssen und dann
kann man erst die Bit's 'zusammenzählen' !
In groben Schritten so:

PORTB = 2
PORTB = 4
PORTB = 8
PORTB = 16
PORTB = 30 !

Wenn jemand an dem kompletten Programm interessiert ist, bitte melden und ein klein wenig Geduld haben,
momentan ist bei mir Hektik und Streß angesagt.
Werde es dann hier öffentlich posten, soll ja jeder was davon haben!

MFG und vielen Dank
Antworten