PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Der Einstieg - 3*3*3 LED Würfel



BurY
27.06.2008, 14:19
Hallo zusammen,
Da ich nun endlich viel Ferien & Freizeit habe, würde ich gerne die zeit nutzen und anfangen mit Mikrocontroller zu spielen. Als erstes Projekt, denke ich, ist ein 3*3*3 LED-Würfel geeignet um in die Programmierung einzusteigen. Ich hab in letzter zeit viel im Wiki gelesen, im Forum natürlich auch.
Da mir nicht alles 100% klar ist hab ich ein paar fragen/Behauptungen, wäre nett, wenn ihr mir diese bestätigen und beantworten könntet.

1.Ist dieser
ATMega32 von Robotikhardware (http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=79_80&products_id=29) = DIESER von Reichelt (http://www.reichelt.de/?;ACTION=3;LA=2;GROUP=A363;GROUPID=2959;ARTICLE=45 026;START=0;SORT=artnr;OFFSET=16;SID=252tBuP6wQARk AACweT-g9a523159b514a9efc3c0039765c4d9c4), bzw
ATMega8 von Robotikhardware (http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=79_80&products_id=29) = DIESER von Reichelt? (http://www.reichelt.de/?;ACTION=3;LA=5;GROUP=A363;GROUPID=2959;ARTICLE=45 024;START=0;SORT=artnr;OFFSET=16;SID=252tBuP6wQARk AACweT-g9a523159b514a9efc3c0039765c4d9c4)
wenn ja, woher die Riesen Preisunterschiede?

2.Ich kann an einen I/O-Port direkt einen Sensor anschließen, der ein High/Low Signal abgibt.

3.Wie viel mA kann ich aus einen I/O-Port ziehen?

4.PWM gibt kontinuierlich ein High/Low-Signal ab, einem I/O-Port muss jedes mal mitteilen wann und wie lange dieser ein High-Signal abgibt.

5.Ich werde in C programmieren, das kann ich auch durch gewisse Tutorials ohne vorkentnisse lernen. (PHP kann ich gut, C++ mal kurz angeschaut, falls das von Vorteil ist).

6.Ich hab hier zwei Modellbau Servos (TP-S3003 (von Tamiya?)). Will ich die betreiben, schließe ich + und - normal an, und PWM kommt an einen I/O-Port. Abhängig davon, wie lange dort Spannung anliegt, dreht sich der Servo an diese Position.

7.Flash = Programmspeicher, EEProm = „BIOS“; 16KB reichen für relativ viel code.

8.Ich kann (z.b. an einem ATMega16) die I/O's PA,PB,PC und PD gleich nutzen (wegen den unterschiedlichen Bezeichnungen).

Würde ich nun einen Würfel bauen dann wäre doch folgende Schaltung als Grundlage zu gebrauchen: Grundschaltung aus dem WIKI (https://www.roboternetz.de/wissen/index.php/Bild:Avrtutorial_grundschaltung_mitled.gif)
Wobei ich dann eben nurnoch 8 weitere LEDs anlöten. Genügt denn obiger ATMega8 Controller von Reichelt und ein ISP-Kabel-Dongle (+Kleinteile wie Widerstände etc) um mein vorhaben zu Realisieren?
Zur Software: benötige ich mehr als WinAVR?
Gibt es sonst was, an was ich nicht gedacht habe? Irgendwas besonderes zu beachten?

So ich hoffe ich habe genug gesucht und stell nicht all zu blöde fragen ;)

MfG

mycroc
27.06.2008, 15:43
was sollen den die Servos in einem 3*3*3 LED Würfel anstellen?
Und wieso noch 8 LED?
3*3*3 = 27 oder meinst du einen 3*3 LED Würfel?
So nun aber genug fragen soll ja eine Antwort werden, ich habe auch so ein ding zusammengebastelt kanst dir ja ein paar sachen abschauen
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=40982&highlight=

Hubert.G
27.06.2008, 15:50
1 ja, ja, schau mal zum C wegen dem Preis
2 ja
3 max. 20mA, es gibt aber eine Gesamtbeschränkung, siehe Datenblatt
4 bei HW-PWM nein, bei SW-PWM ja
5 AVR-Studio von atmel.com gratis herunterladen
6 im RN-Wissen ist beschrieben wie man Servos anschaltet, SW gibt es auch
7 Flash kann zur laufzeit nicht beschrieben werden, EEPROM schon, 16k ist reichlich
8 abgesehen von Spezialfunktionen ja
Auf Basis der Grundschaltung ja
Für den einfachen ISP-Dongle brauchst du eine parallele Schnittstelle am PC

nietzsche
27.06.2008, 15:51
Hi,

ich bin leider selber noch fast ein blutiger Anfänger, jedoch kann ich einiege deiner Fragen beantworten...




1.Ist dieser
ATMega32 von Robotikhardware (http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=79_80&products_id=29) = DIESER von Reichelt (http://www.reichelt.de/?;ACTION=3;LA=2;GROUP=A363;GROUPID=2959;ARTICLE=45 026;START=0;SORT=artnr;OFFSET=16;SID=252tBuP6wQARk AACweT-g9a523159b514a9efc3c0039765c4d9c4), bzw
ATMega8 von Robotikhardware (http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=79_80&products_id=29) = DIESER von Reichelt? (http://www.reichelt.de/?;ACTION=3;LA=5;GROUP=A363;GROUPID=2959;ARTICLE=45 024;START=0;SORT=artnr;OFFSET=16;SID=252tBuP6wQARk AACweT-g9a523159b514a9efc3c0039765c4d9c4)
wenn ja, woher die Riesen Preisunterschiede?


Ja, ist der selbe... Woher der Preisunterschied kommt, frag mich was leichteres... Ich kauf die immer bei mir in nem Elektroladen, und die Preise sind sogar teilweise unter Reichelt...



2.Ich kann an einen I/O-Port direkt einen Sensor anschließen, der ein High/Low Signal abgibt.


Ja



3.Wie viel mA kann ich aus einen I/O-Port ziehen?

Weiß ich leider nicht, habs aber gestern wo gelesen... Jedenfalls kannst du mehr im "Lowlevel" rausziehen... Deshalb sind in der Schlatung z.B. die LED´s mit der Kathode am Controller


4.PWM gibt kontinuierlich ein High/Low-Signal ab, einem I/O-Port muss jedes mal mitteilen wann und wie lange dieser ein High-Signal abgibt.




5.Ich werde in C programmieren, das kann ich auch durch gewisse Tutorials ohne vorkentnisse lernen. (PHP kann ich gut, C++ mal kurz angeschaut, falls das von Vorteil ist).

Also ich kann recht gut Programmieren, und nutze nun Basic... Komm super mit klar...


6.Ich hab hier zwei Modellbau Servos (TP-S3003 (von Tamiya?)). Will ich die betreiben, schließe ich + und - normal an, und PWM kommt an einen I/O-Port. Abhängig davon, wie lange dort Spannung anliegt, dreht sich der Servo an diese Position.

Leider keine Ahnung, aber ich denke schon?!


7.Flash = Programmspeicher, EEProm = „BIOS“; 16KB reichen für relativ viel code.


Reicht auf jeden Fall übermassig für den Code eines Cubes



8.Ich kann (z.b. an einem ATMega16) die I/O's PA,PB,PC und PD gleich nutzen (wegen den unterschiedlichen Bezeichnungen).

Ja, allerdings musst du aufpassen, viele Ports haben eine alternative Belegung... z.B. PD0 und PD1 beim Mega16/32 sind die RX und TX Pins


Würde ich nun einen Würfel bauen dann wäre doch folgende Schaltung als Grundlage zu gebrauchen: Grundschaltung aus dem WIKI (https://www.roboternetz.de/wissen/index.php/Bild:Avrtutorial_grundschaltung_mitled.gif)
Wobei ich dann eben nurnoch 8 weitere LEDs anlöten. Genügt denn obiger ATMega8 Controller von Reichelt und ein ISP-Kabel-Dongle (+Kleinteile wie Widerstände etc) um mein vorhaben zu Realisieren?
Zur Software: benötige ich mehr als WinAVR?
Gibt es sonst was, an was ich nicht gedacht habe? Irgendwas besonderes zu beachten?

Sollte so passen... Vllt noch ein Taster, um verschiedene "Programme" wählen zu können...
Mega8 reicht... Das ISP Dongle hab ich übrigends selber gebaut... Wenn du auf Lochraster lötest, kommst du mir 2-4€ hin...



Also, ich bin wie gesagt selber noch Anfänger, und habe letzte Woche das erste mal einen Microcontroller (auf selbstgebauter Ex-Platine) in Betrieb genommen, und arbeite gerade an meinem ersten Projekt (Metronom mit Mega8), von daher keine Garantie... Ich lasse mich gerne verbessern...

Grüße
Nietzsche

BurY
27.06.2008, 16:26
Danke erstmal für die schnellen antworten!

@mycroc ja das mit den weiteren leds war ein denkfehler, es sind natürlich 27stk, das mit den servos war nur ein beispiel, und hat nichts mit dem Cube zu tun.
Um auf deinen Schaltplan einzugehen:
Oben Links ist die Stromversorgung, untenlinks der Quarz und darüber der Anschluss für den ISP-Dongle.
... und die Leds?
Die 'K's auf der rechte Seite auf dem Layout?
Wie sind die LEDs angeschlossen, ist ja nicht jede einzeln oder?
Ist das über Multiplexing gelöst?
Sorry werde aus dem Schaltplan/dem Bild nicht ganz schlau ;)

@nietzsche
Ich würde gerne in C programmieren, da ich ab September eine Lehre beginne, bei der es mir von vorteil wäre, wenn ich mich mit C schon etwas auskenne.

dremler
27.06.2008, 16:29
die preise werden wohl so hoch sein damit man auch ein wenig gewin macht....wenn man nur gering über dem einkaufspreis verkauft dauert es halt viel länger ein kleines vermögen anzuhäufen:P

mycroc
27.06.2008, 20:56
habe den Schaltplan ein wenig geänder, solte jetzt verständlicher sein

http://www.filedealer.com/freeupload/057bfa091e60cfe638ce017186576527.pdf

BurY
28.06.2008, 10:01
Vielen dank! Dann werde ich die Schaltung mal so ungefähr nachbauen, und die Bestellung rausschicken.

BurY
01.07.2008, 21:45
Hi
hab jetzt meine teile und funktioniert auch alles soweit.
allerdings weis ich nicht wie ich die Fuse-bits für den Quarz einstellen muss.
denn die Einstellung im Wiki ( https://www.roboternetz.de/wissen/index.php/AVR-Einstieg_leicht_gemacht#Grundschaltung_mit_Quarz ) gibts bei mir nicht, ich habe dort andere Optionen zur Auswahl.

BurY
02.07.2008, 10:03
Hab jetzt mal das Datenblatt zum ATMega32 (http://www.reichelt.de/?;ACTION=3;LA=2;GROUP=A363;GROUPID=2959;ARTICLE=45 026;START=0;SORT=artnr;OFFSET=16;SID=252tBuP6wQARk AACweT-g9a523159b514a9efc3c0039765c4d9c4) und zum Quarz (http://www.reichelt.de/index.html?;ACTION=3;LA=2;GROUP=B41;GROUPID=3173;A RTICLE=32852;START=0;SORT=preis;OFFSET=1000;SID=25 2tBuP6wQARkAACweT-g9a523159b514a9efc3c0039765c4d9c4) angesehen. Aber ich kann keine angaben zur startup-time des Quarz finden. Außerdem sind dort nur Quarze bis 8 MHz angegeben (Seite 24 im Datenblatt).
und was ist mit dem BOD? en- oder disable?

Im Prinzip würde mit die genau Einstellung der Fuse-bits schon genügen, hoffe ihr könnt mir helfen

BastelWastel
02.07.2008, 11:40
Wenn du keine grossen Datenmengen schnell ueber RS232 senden willst..wo ich bei 3^3 LED's nicht ausgehe, reicht dir normal auch der interne?
BOD ist die Brown-Out Detection und resetet den uC wenn die Betriebsspannung zu klein wird, aber du wirst den Aufbau eh am Netz betreiben.

BurY
03.07.2008, 22:29
So hab nun doch keinen Würfel, sondern ein 5*5 panel, da dies noch im Regal lag.
http://www.youtube.com/watch?v=83N7au7Ujvk
5 Programme die über einen Taster durchgeschaltet werden können. die grünen LEDs rechts zeigen das aktuelle Programm (1-5 zählen binär). Die rote LED zeigt den gedrückten Taster an.
Das Video wurde durchs konvertieren etwas schneller.



$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600

'--- IN/OUT CONFIG ---
Config Porta = Output
Config Portc = Output
Config Portd = Output
Config Pinb.2 = Input
Config Pina.6 = Input
'---------------------


'---PINS BENENNEN-----
S5 Alias Portc.0
S4 Alias Portc.1
S3 Alias Portc.2
S2 Alias Portc.3
S1 Alias Portc.4

Z5 Alias Porta.0
Z4 Alias Porta.1
Z3 Alias Porta.2
Z2 Alias Porta.3
Z1 Alias Porta.4

Taster Alias Pinb.2

Sled1 Alias Portd.5
Sled2 Alias Portd.4
Sled3 Alias Portd.3
Tled Alias Portd.2
'---------------------


'---UNTERPROGRAMME----
Declare Sub Mustera()
Declare Sub Musterb()
Declare Sub Musterc()
Declare Sub Musterd()
Declare Sub Mustere()
'---------------------


'---Taster & status --
Portd.6 = 1
Portd.5 = 1
Portd.4 = 1
Portd.3 = 1
Portd.2 = 1
Portb.2 = 1
Porta.6 = 1
'---------------------


'---VARIABLEN---------
Dim A As Integer
A = 0

'---------------------

Do

'-------LEDS AUS------
Porta.1 = 1
Porta.0 = 1
Porta.2 = 1
Porta.3 = 1
Porta.4 = 1
Portc.0 = 1
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
Portc.4 = 1

'---------------------

If Taster = 0 Then
Incr A
Tled = 0
End If

If A = 6 Then
A = 1
End If

If A = 1 Then
Call Mustera()
Sled1 = 0
Sled2 = 1
Sled3 = 1
Tled = 1
End If

If A = 2 Then
Call Musterb()
Sled1 = 1
Sled2 = 0
Sled3 = 1
Tled = 1
End If

If A = 3 Then
Call Musterc()
Sled1 = 0
Sled2 = 0
Sled3 = 1
Tled = 1
End If

If A = 4 Then
Call Musterd()
Sled3 = 0
Sled2 = 1
Sled1 = 1
Tled = 1
End If

If A = 5 Then
Call Mustere()
Sled3 = 0
Sled2 = 1
Sled1 = 0
Tled = 1
End If

Loop

Sub Mustera()
Z2 = 1
S1 = 0
S5 = 0
Z1 = 0
Waitms 50
S1 = 1
S5 = 1
Z1 = 1
S2 = 0
S4 = 0
Z2 = 0
Waitms 50
S2 = 1
S4 = 1
Z2 = 1
S3 = 0
Z3 = 0
Waitms 50
S3 = 1
Z3 = 1
S4 = 0
S2 = 0
Z4 = 0
Waitms 50
S4 = 1
S2 = 1
Z4 = 1
S5 = 0
S1 = 0
Z5 = 0
Waitms 50
S5 = 1
S1 = 1
Z5 = 1
Z4 = 0
S1 = 0
S5 = 0
Waitms 50
Z3 = 0
Z4 = 1
Waitms 50
Z3 = 1
Z2 = 0
Waitms 50
End Sub

Sub Musterb()
S3 = 0
Z3 = 0
Waitms 70
S2 = 0
S4 = 0
Z2 = 0
Z4 = 0
Waitms 70
S1 = 0
S5 = 0
Z1 = 0
Z5 = 0
Waitms 70
Z5 = 1
Z1 = 1
S5 = 1
S1 = 1
Waitms 70
S2 = 1
S4 = 1
Z2 = 1
Z4 = 1
Waitms 70
End Sub

Sub Musterc()
Z1 = 0
S1 = 0
Waitms 70
S1 = 1
S2 = 0
Waitms 70
S2 = 1
S3 = 0
Waitms 70
S3 = 1
S4 = 0
Waitms 70
S4 = 1
S5 = 0
Waitms 70
Z1 = 1
Z2 = 0
Waitms 70
Z2 = 1
Z3 = 0
Waitms 70
Z3 = 1
Z4 = 0
Waitms 70
Z4 = 1
Z5 = 0
Waitms 70
S5 = 1
S4 = 0
Waitms 70
S4 = 1
S3 = 0
Waitms 70
S3 = 1
S2 = 0
Waitms 70
S2 = 1
S1 = 0
Waitms 70
Z5 = 1
Z4 = 0
Waitms 70
Z4 = 1
Z3 = 0
Waitms 70
Z3 = 1
Z2 = 0
Waitms 70
Z2 = 1
Waitms 70
End Sub

Sub Musterd()
Z1 = 0
S1 = 0
Z5 = 0
S5 = 0
Waitms 70
S1 = 1
S2 = 0
S5 = 1
S4 = 0
Waitms 70
S2 = 1
S4 = 1
S3 = 0
Waitms 70
S3 = 1
S4 = 0
S2 = 0
Waitms 70
S4 = 1
S2 = 1
S5 = 0
S1 = 0
Waitms 70
Z1 = 1
Z5 = 1
Z2 = 0
Z4 = 0
Waitms 70
Z2 = 1
Z4 = 1
Z3 = 0
Waitms 70
Z3 = 1
Z4 = 0
Z2 = 0
Waitms 70
Z4 = 1
Z2 = 1
Z5 = 0
Z1 = 0
Waitms 70
S5 = 1
S1 = 1
S4 = 0
S2 = 0
Waitms 70
S4 = 1
S2 = 1
S3 = 0
Waitms 70
S3 = 1
S2 = 0
S4 = 0
Waitms 70
S2 = 1
S4 = 1
S1 = 0
S5 = 0
Waitms 70
Z5 = 1
Z1 = 1
Z4 = 0
Z2 = 0
Waitms 70
Z4 = 1
Z2 = 1
Z3 = 0
Waitms 70
Z3 = 1
Z2 = 0
Z4 = 0
Waitms 70
Z2 = 1
Z4 = 1
Waitms 70
End Sub

Sub Mustere()
Z3 = 0
S5 = 0
Waitms 70
S5 = 1
S4 = 0
Waitms 70
S4 = 1
S3 = 0
Waitms 70
S3 = 1
S2 = 0
Waitms 70
S2 = 1
S1 = 0
Waitms 70
Z3 = 1
Z2 = 0
Z4 = 0
Waitms 70
Z2 = 1
Z4 = 1
Z5 = 0
Z1 = 0
Waitms 70
S1 = 1
S2 = 0
Waitms 70
S2 = 1
S3 = 0
Waitms 70
S3 = 1
S4 = 0
Waitms 70
S4 = 1
S5 = 0
Waitms 70
Z1 = 1
Z5 = 1
Z2 = 0
Z4 = 0
Waitms 70
End Sub


Ich nehm stark an das der Code extrem verringert werden kann, werde mich die tage da mal etwas schlauer machen. Gibts denn irgendwo ne gute basic befehlsübersicht?

oZe
14.07.2008, 15:31
In der Bascom Hilfe ist eine komplette Befehlsreferenz Erfasst die meiner Meinung nach auch sehr gut aufgebaut ist und relativ informativ.

Übrigens solltest du event. drüber nachdenken die Tasterabfrage anstelle von if Taster = 1 mit Debounce zu machen. Da du in der Abfrage direkt eine increment drin hast kann es dir sonst passieren, dass die Variable nicht nur um 1 erhöht wird.