Was ist die schnellste Methode um eine LED mit einem MEGA8 anzusteuern?
Ich hatte da mal ne Seite, aber ich find die nicht mehr und google
spuckt auch nichts brauchbares aus. Könnt ihr mir eine Methode
empfehlen? Schaltplan oder ASM Code?
Hoffe ihr wisst Antwort,
Danke
Flo
GND ---> Pin8 vom M8
Pin22 vom M8 ---> Vorwiderstand
Vorwiderstand ---> LEDLED ---> VCC
schneller und einfacher gehts nicht und man muss nichtmal programmieren.
Ich denke mal du willst etwas in der Art.
cbi portb,0 löscht Bit0 im I/O Register von PortB, Ausgang
B0=Masse
sbi portb,0 setzt Bit0 im I/O Register von PortB, Ausgang
B0=Betriebsspannung
[c]GND ---> Pin8 vom M8
Pin22 vom M8 ---> Vorwiderstand
Vorwiderstand ---> LEDLED ---> VCC
schneller und einfacher gehts nicht und man muss nichtmal programmieren.
[c]
Und die Programmierung ist dann die im Tutorial in i/O Grundlagen
beschriebene?
Danke
Flo
@Uwe
Was muss man jetzt noch drumherum schreiben und wie bekommt man die LED
wieder aus? Oder ist die jetzt noch gar nicht an
PS: Wenn ich nen Mega8 hab werd ich das Tutorial durcharbeiten, klappt
ohne aber nicht.
Ich hatte mal ein wenig aufm Computer mit rumgespielt aber auf dieser
Plattform keinen Nutzen erkannt. Ich konnte halt so ein bissl die
Grundlagen nicht mit GUI oder so.
Den Controller möcht ich aber gerne in ASM programmieren
Flo
Um ne PropClock
Aber jetzt bitte keine Tipps wie "Schau da und da", "Oder dort".
Ich würd die gerne selber machen und selber programmieren, keine
vorgefertigten Sachen nehmen. Sind 8Mhz in Ordnung?
Flo
Erst tutorial durcharbeiten, dann fragen zu LEDs und zur propeller clock
stellen. Macht ansonsten keinen Sinn. Und du solltest unbedingt von
anderen propeller clocks abschauen (zumindest die Hardware), sich sowas
als Anfänger selbst aus zu denken ist nicht so einfach.
@ Flo (Gast)
>Um ne PropClock
Wie fein.
>Aber jetzt bitte keine Tipps wie "Schau da und da", "Oder dort".
Nöö. Klemm die LEDs einfach mit Vorwiderstand an den AVR und los gehts.
Ist schnell genug.
>vorgefertigten Sachen nehmen. Sind 8Mhz in Ordnung?
Locker. Ein AVR ist doch kein PIC ;-)
MFG
Falk
"...Ich würd die gerne selber machen und selber programmieren, keine
vorgefertigten Sachen nehmen. Sind 8Mhz in Ordnung?"
hmm, ok, dann überlege es selbst, damit du auch ein Gefühl dafür
bekommst. Stichworte, die überlegenswert dabei sind:
* Umdrehungsgeschwindigkeit
* "Anzahl der Pixel", die du darstellen willst (in beiden Richtungen!)
Das zusammengewürfelt und runtergerechnet auf einen Pixel ergibt das,
was du suchst bzw. wie schnell dein MC sein muss (das ist das gleiche,
wie beim Cube...;-)).
Uwe
Hier ist mal mein aktueller Schaltplan. Könntet ihr bitte ganz genau
überprüfen, ob er stimmt? Und wie kann ich Anschlüsse VCC+ zuweisen?
Also dieser Pfeil den es da gibt? Wie mach ich den? Die langen linien
sind nämlich ein bissl unpraktisch
@∂er andre Uwe
Ich hab keinen Plan wie man das ausrechnet, und ich weiß auch nicht wie
viele Umdrehngen der Motor hat... (Ist aus nem DiscMan)
Danke Flo
PS: Ne ISP SChnittstelle kommt noch dran
@ Flo (Gast)
>Hier ist mal mein aktueller Schaltplan. Könntet ihr bitte ganz genau>überprüfen, ob er stimmt?
Deine LEDs sind verpolt.
> Und wie kann ich Anschlüsse VCC+ zuweisen?
Mit dem Vcc Symbol. Das ist aber kein Eagle oder? Dort wäre es in der
Bibliothek Supply.
>Ich hab keinen Plan wie man das ausrechnet,
Dan musst du wohl doch dich mal bei bestehenden Projekten informieren
;-)
MFG
Falk
"Ich hab keinen Plan wie man das ausrechnet, und ich weiß auch nicht wie
viele Umdrehngen der Motor hat... (Ist aus nem DiscMan)"
Genau das solltest du wissen und auch in deiner Schaltung
berücksichtigen, sonst wirst du kein sinnvolles Bild hinbekommen!
Überlege einfach mal, wie den der "bildliche Effekt" zustande kommt!
Uwe
@Uwe
Ich dachte, ich ermittle die Umdrehungen wenn ich alles zusammengebaut
hab und überprüfe mim IC wie oft der Hall Sensor in einer Minute
schliesst?
... und wie bringst du das dann in Zusammenhang mit/in deinem noch zu
schreibenden Programm?
Die Drehgeschwindigkeit deines Motors muss gross genug sein, dass der
Effekt eines statischen Bildes entsteht. Dein Programm muss
gewährleisten, dass die LEDs so angesteuert werden, dass der Effekt
eines stehenden Bildes entsteht (und dies ist im Zusammenhang mit der
Umdrehungsgeschwindigkeit zu sehen).
Und nun überlege einfach mal! Ansonsten bezweifle ich auch, dass es
sinnvoll ist, dass du8 mit einem solchen Projekt weiter machst...
Uwe
@ Flo (Gast)
>angepasst... Muss ich an Pin 3,4,5,6 überhaupt was anschliessen
LOGISCH! Das ist die Stromversorgung!
oder
>Stimmt das so?
Nöö. Die Kondensatoren müssen parallel zu GND/Vcc angeschlossen werden!
MFG
Falk
ja, die kondensatoren stimmen jetzt.
aber da du pro gesamtem port einen gewissen gesamtstrom nicht
übersteigen darfst, würde ich dir empfehlen, einen treiber für deine
leds zu benutzen. der gute alte uln2803 drängt sich förmlich auf.
das ist ein darlington-transistor-array mit integrierten
vorwiderständen. den musst du einfach nur in die leitung schalten.
http://www.datasheetcatalog.org/datasheets/105/366825_DS.pdf
@ Flo (Gast)
>Gibts den in Eagle?
Sicher.
> Google spuckt nichts aus...
Google weiss Gott sei Dank nicht alles.
Schau mal in die Bibliothek "ULN-UDN"
(Wer hätte DAS gedacht?)
MFg
Falk
P.S. Man kann auch ICs suchen, indem man bei ADD in dem Fenster uunten
links den Namen eingibt. Aber Vorsicht, reichlich mit Platzhaltern *
arbeiten, sonst werden nur EXAKTE Übereinstimmungen gefunden.
Ich hab den Schaltplan noch mal ein wenig modifiziert und ne ISP
Schnitstelle hinzugefügt. Stimmt die Beschaltung. Und wie kann ich die
RESET Linie (PIN5 an RESET) mit so nem Pfeil machen, dass der Schaltplan
übersichtlich bleibt aber der AUtorouter weiß, dass das ne Verbindung
hin muss?
Danke Flo
PS: Ist jetzt auch ein anderer MEGA8 (DIP Gehäuse)
@ Flo (Gast)
>Und was muss an CD+ dran?? das bleibt frei oder?
Ja, das braucht man nur bei Relais.
>Schnitstelle hinzugefügt. Stimmt die Beschaltung.
Vcc fehlt an Pin2 des ISP Steckers.
Es fehlen die Vorwiderstände der LEDs.
> Und wie kann ich die>RESET Linie (PIN5 an RESET) mit so nem Pfeil machen, dass der Schaltplan>übersichtlich bleibt
Gar nicht, die Symbole sind nur für Versorgungsspannungen etc. Man kann
aber ein Stück Netz zeichnen und einen Namen vergeben. Netze mit
gleichen Namen werden dann verbunden.
MFG
Falk
Flo wrote:
> Und was muss an CD+ dran?? das bleibt frei oder?
da du ja nicht alles vorgekaut haben wolltest, bekommst du hier nur
folgenden google-tipp: freilaufdiode
> Ich hab den Schaltplan noch mal ein wenig modifiziert und ne ISP
ich würde die vorwiderstände für die leds wieder reinmodifizieren ^^
wenn du nicht so genau weißt, warum:
http://www.elektronik-kompendium.de/sites/slt/0208031.htm> Schnitstelle hinzugefügt. Stimmt die Beschaltung. Und wie kann ich die
kann praktisch sein, ist aber nicht unbedingt notwendig, da du ja den
atmega in einen sockel setzen kannst - würd ich dir auch für den
fehlerfall empfehlen.
wenn dir das routen zu schwer fällt, lass sie einfach weg oder bau sie
erst später wieder ein.
> RESET Linie (PIN5 an RESET) mit so nem Pfeil machen, dass der Schaltplan
zeichne daran einfach ein stück netz. damit hat dieser sog. knoten einen
namen. eagle vergibt hier N$###. jetzt zeichnest du auch an die
isp-schnittstelle ein stück net und benennst das wie das stück am
reset-pin. den namen kannst du frei wählen. sinnvoll ist es, mit dem
label werkzeug die spezielle benenung sichtbar zu machen.
> übersichtlich bleibt aber der AUtorouter weiß, dass das ne Verbindung> hin muss?
über eagle und autorouter findest du hier genügend meinungen, die dir
davon abraten sollten. für so ein simples layout solltest du ihn auch
auf keinen fall brauchen.
noch was ganz andres: findest du nicht, dass dein atmega wissen sollte,
wie schnell er durch die luft fliegt?
Nach dem ganzen Problem bin ich bei diesem Projekt gelandet, welches ich
gerne nachbauen würde, wenn ihr mir ein bissl unter die Arme greift:
http://www.microsyl.com/
->Auf PropClock drücken
Das erste Problem hab ich allerdings schon mit dem Quellcode. Ich hab
versucht per Make zu kompilieren:
Mein Make:
# Name: Makefile
# Author: <insert your name here>
# Copyright: <insert your copyright message here>
# License: <insert your license reference here>
# This is a prototype Makefile. Modify it according to your needs.
# You should at least check the settings for
# DEVICE ....... The AVR device you compile for
# CLOCK ........ Target AVR clock rate in Hertz
# OBJECTS ...... The object files created from your source files. This
list is
# usually the same as the list of source files with
suffix ".o".
# PROGRAMMER ... Options to avrdude which define the hardware you use
for
# uploading to the AVR and the interface where this
hardware
# is connected.
# FUSES ........ Parameters for avrdude to flash the fuses
appropriately.
DEVICE = atmega8
CLOCK = 8000000
PROGRAMMER = -c USBasp
OBJECTS = main.o
FUSES = -U hfuse:w:0xd9:m -U lfuse:w:0x24:m
# ATMega8 fuse bits (fuse bits for other devices are different!):
# Example for 8 MHz internal oscillator
# Fuse high byte:
# 0xd9 = 1 1 0 1 1 0 0 1 <-- BOOTRST (boot reset vector at 0x0000)
# ^ ^ ^ ^ ^ ^ ^------ BOOTSZ0
# | | | | | +-------- BOOTSZ1
# | | | | +---------- EESAVE (set to 0 to preserve EEPROM over
chip erase)
# | | | +-------------- CKOPT (clock option, depends on
oscillator type)
# | | +---------------- SPIEN (if set to 1, serial programming is
disabled)
# | +------------------ WDTON (if set to 0, watchdog is always
on)
# +-------------------- RSTDISBL (if set to 0, RESET pin is
disabled)
# Fuse low byte:
# 0x24 = 0 0 1 0 0 1 0 0
# ^ ^ \ / \--+--/
# | | | +------- CKSEL 3..0 (8M internal RC)
# | | +--------------- SUT 1..0 (slowly rising power)
# | +------------------ BODEN (if 0, brown-out detector is
enabled)
# +-------------------- BODLEVEL (if 0: 4V, if 1: 2.7V)
# Example for 12 MHz external crystal:
# Fuse high byte:
# 0xc9 = 1 1 0 0 1 0 0 1 <-- BOOTRST (boot reset vector at 0x0000)
# ^ ^ ^ ^ ^ ^ ^------ BOOTSZ0
# | | | | | +-------- BOOTSZ1
# | | | | +---------- EESAVE (set to 0 to preserve EEPROM over
chip erase)
# | | | +-------------- CKOPT (clock option, depends on
oscillator type)
# | | +---------------- SPIEN (if set to 1, serial programming is
disabled)
# | +------------------ WDTON (if set to 0, watchdog is always
on)
# +-------------------- RSTDISBL (if set to 0, RESET pin is
disabled)
# Fuse low byte:
# 0x9f = 1 0 0 1 1 1 1 1
# ^ ^ \ / \--+--/
# | | | +------- CKSEL 3..0 (external >8M crystal)
# | | +--------------- SUT 1..0 (crystal osc, BOD enabled)
# | +------------------ BODEN (if 0, brown-out detector is
enabled)
# +-------------------- BODLEVEL (if 0: 4V, if 1: 2.7V)
# Tune the lines below only if you know what you are doing:
AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE)
COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE)
# symbolic targets:
all: main.hex
.c.o:
$(COMPILE) -c $< -o $@
.S.o:
$(COMPILE) -x assembler-with-cpp -c $< -o $@
# "-x assembler-with-cpp" should not be necessary since this is the
default
# file type for the .S (with capital S) extension. However, upper case
# characters are not always preserved on Windows. To ensure WinAVR
# compatibility define the file type manually.
.c.s:
$(COMPILE) -S $< -o $@
flash: all
$(AVRDUDE) -U flash:w:main.hex:i
fuse:
$(AVRDUDE) $(FUSES)
# Xcode uses the Makefile targets "", "clean" and "install"
install: flash fuse
# if you use a bootloader, change the command below appropriately:
load: all
bootloadHID main.hex
clean:
rm -f main.hex main.elf $(OBJECTS)
# file targets:
main.elf: $(OBJECTS)
$(COMPILE) -o main.elf $(OBJECTS)
main.hex: main.elf
rm -f main.hex
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
# If you have an EEPROM section, you must also create a hex file for the
# EEPROM and add it to the "flash" target.
# Targets for code debugging and analysis:
disasm: main.elf
avr-objdump -d main.elf
cpp:
$(COMPILE) -E main.c
Wo liegt der Fehler? Sind die FuseBits richtig? und der ControllerTyp?
Ich hab schon recherchiert aber zu dem Thema nichts passendes
gefunden...
Danke
Flo
aaalso doch nachbaun ^^
aber erst mal: wo liegt WELCHER fehler?
das makefile kann auch nötig sein, aber viel viel nötiger ist die
fehlermeldung selbst.
zum berechnen der fusewerte finde ich das avr-studio recht nett.
auf den ersten blick siehts nicht schlecht aus.
Hier die Fehlermeldung (ist ziemlich lang)
Wo sind beim avr MacPack die Bibliotheken?
Macintosh:firmware Flops$ make
avr-gcc -Wall -Os -DF_CPU=8000000 -mmcu=atmega8 -c main.c -o main.o
main.c:10:21: error: io2313v.h: No such file or directory
main.c:11:20: error: macros.h: No such file or directory
main.c:24: warning: ignoring #pragma interrupt_handler
Crossing_interrupt
main.c:25: warning: ignoring #pragma interrupt_handler IR_interrupt
main.c:26: warning: ignoring #pragma interrupt_handler Degre_interrupt
main.c:27: warning: ignoring #pragma interrupt_handler Ticker_interrupt
main.c:88: warning: return type of 'main' is not 'int'
main.c: In function 'main':
main.c:90: error: 'WDTCR' undeclared (first use in this function)
main.c:90: error: (Each undeclared identifier is reported only once
main.c:90: error: for each function it appears in.)
main.c:92: error: 'PORTD' undeclared (first use in this function)
main.c:93: error: 'DDRD' undeclared (first use in this function)
main.c:96: error: 'MCUCR' undeclared (first use in this function)
main.c:97: error: 'GIMSK' undeclared (first use in this function)
main.c:100: error: 'TCCR0' undeclared (first use in this function)
main.c:103: error: 'TCCR1B' undeclared (first use in this function)
main.c:104: error: 'TIMSK' undeclared (first use in this function)
main.c:107: error: 'PORTB' undeclared (first use in this function)
main.c:108: error: 'DDRB' undeclared (first use in this function)
main.c:115: warning: implicit declaration of function 'SEI'
main.c: In function 'Crossing_interrupt':
main.c:245: error: 'TCNT1' undeclared (first use in this function)
main.c:256: error: 'OCR1' undeclared (first use in this function)
main.c:257: error: 'TIFR' undeclared (first use in this function)
main.c: In function 'Degre_interrupt':
main.c:276: error: 'OCR1' undeclared (first use in this function)
main.c:276: error: 'TCNT1' undeclared (first use in this function)
main.c: In function 'Display':
main.c:296: error: 'PORTB' undeclared (first use in this function)
main.c: In function 'IR_interrupt':
main.c:359: error: 'ICR1' undeclared (first use in this function)
main.c: In function 'Ticker_interrupt':
main.c:399: error: 'TCNT0' undeclared (first use in this function)
make: *** [main.o] Error 1
Macintosh:firmware Flops$ make
avr-gcc -Wall -Os -DF_CPU=8000000 -mmcu=atmega8 -c main.c -o main.o
main.c:10:25: error: avr/io2313v.h: No such file or directory
main.c:11:20: error: macros.h: No such file or directory
main.c:24: warning: ignoring #pragma interrupt_handler
Crossing_interrupt
main.c:25: warning: ignoring #pragma interrupt_handler IR_interrupt
main.c:26: warning: ignoring #pragma interrupt_handler Degre_interrupt
main.c:27: warning: ignoring #pragma interrupt_handler Ticker_interrupt
main.c:88: warning: return type of 'main' is not 'int'
main.c: In function 'main':
main.c:90: error: 'WDTCR' undeclared (first use in this function)
main.c:90: error: (Each undeclared identifier is reported only once
main.c:90: error: for each function it appears in.)
main.c:92: error: 'PORTD' undeclared (first use in this function)
main.c:93: error: 'DDRD' undeclared (first use in this function)
main.c:96: error: 'MCUCR' undeclared (first use in this function)
main.c:97: error: 'GIMSK' undeclared (first use in this function)
main.c:100: error: 'TCCR0' undeclared (first use in this function)
main.c:103: error: 'TCCR1B' undeclared (first use in this function)
main.c:104: error: 'TIMSK' undeclared (first use in this function)
main.c:107: error: 'PORTB' undeclared (first use in this function)
main.c:108: error: 'DDRB' undeclared (first use in this function)
main.c:115: warning: implicit declaration of function 'SEI'
main.c: In function 'Crossing_interrupt':
main.c:245: error: 'TCNT1' undeclared (first use in this function)
main.c:256: error: 'OCR1' undeclared (first use in this function)
main.c:257: error: 'TIFR' undeclared (first use in this function)
main.c: In function 'Degre_interrupt':
main.c:276: error: 'OCR1' undeclared (first use in this function)
main.c:276: error: 'TCNT1' undeclared (first use in this function)
main.c: In function 'Display':
main.c:296: error: 'PORTB' undeclared (first use in this function)
main.c: In function 'IR_interrupt':
main.c:359: error: 'ICR1' undeclared (first use in this function)
main.c: In function 'Ticker_interrupt':
main.c:399: error: 'TCNT0' undeclared (first use in this function)
make: *** [main.o] Error 1
also ich hab die fehlermeldungen mal kurz überflogen... und mir kommts
fast so vor, als hättest du kein einziges include verwendet...
standard includes wie zb:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>
.
.
.
und sicher noch irgendwelche speziellen
lg