Hallo, ich lese schon einige eit im Forum mit ,und hab mir jetzt mein
eigenes Board gebaut. Es besteht aus einem ATmga32 ein paar LED´s,
Taster 7-Segment Anzeige...
Jetzt wollt ich nachdem ich alles gelötet habe mal ne LED ansteuern, hab
mir die C Tutorials durchgelesen, und habs kompiliert und programmiert.
Es ging auch alles, also bim proggen kein Fehler und als ich getestet
hab hat nichts geleuchtet, außer die LED für die Spannungsversorgung
(bei mir ne Grüne LED, die ON / OFF signalisiert).
Hab etwas geshcut, und hab zufällig nen Assembler code gefunden wo ne
LED ansteuert. Kopiert, geändert, geflasht und hat auf anhieb
funktioniert!
Ich war sehr ras, da es an der Hardware nicht liegen kann, also hab an
den Fusebits NIX verstell, wollt einfach ma was proggen.
Hier noch meine Scripts vllt könnt ihr mir helfen, bin ratlos und find
nix zu dem Prob. im Net:
C:
#include <avr/io.h>
int main() {
while(1) {
DDRB=0xFF;
}
return 0; }
Assembler:
.include "m32def.inc"
ldi r16, 0xFF
out DDRB, r16
ldi r16, 0b00001100
out PORTB, r16
ende: rjmp ende
Wie muss dann der korrekte Code lauten? ich hab jetzt schon zwei Tage
nur damit verbracht danch zu suchen ;) wär super wenn ihr mir das ma
erklären könntet, weiß auch nicht wo das stehen muss also in oder
außerhalb der loop
Kann mir den Keiner Helfen? Würd gen ma was für mein Board proggen und
das in C ;( die Tuts helen mir nicht, weil die nicht gehen bei mir
zumindest in C nich, in Assembler gehen sie ja
was meinste? ich hab den Assembler code im I-Net gefunden, habs
geflasht, und es hat funktioniert, und den C-Code hab ich auch gefunden
geflasht, ging nicht obohl in dem tut stand, das es gehen müsste,
richtig angeschlossen ist die LED also immer an Masse und der port muss
dann 5V geben, vorwid. ist direkt am Port die Scripts stehen oben also
im ersten Beitrag
also das Programm kann ich gut Übertragen und es Funktioniert, hab auch
shcon ma ne HEX aus dem Forum geflasht, die machte auch was sie sollte,
auch an PORTB aber warum kann ich meine LES nicht ansteuern, bei der Hex
blinktedie erste LED immer aber ich will ja ne LED auf PB2 und PB3 zum
leuten bringen.
Huhn schrieb:
> ich hab den Assembler code im I-Net gefunden, habs> geflasht, und es hat funktioniert, und den C-Code hab ich auch gefunden> geflasht
und wie sieht der Assembler-Code von dem C-Code aus? das wollte Gast
wissen...
Also das mit dem Assembler Code vom C hap ich immern och nich gerafft,
natürlich hab ich die Hex geflasht, F7 gedrückt, alles okay, keine
Warnings hex ausgewählt, übertragen fertig.
Das mit den zwei Codes weis ich nicht, oder kann man einen C code in
Assembler umwandeln?
Huhn schrieb:
> Das mit den zwei Codes weis ich nicht, oder kann man einen C code in> Assembler umwandeln?
vielleicht solltest du dich mal informieren, was dein Compiler
macht...und du könntest dir mal die Dateien anschauen, die dein Compiler
erstellt
Versuch mal diesen Code.
Hier müssten die LED's blinken.
Als erstes solltest Du es mal im Simularor testen wird dort der Pin dann
als richtig signalisiert sollte das gleiche auch auf Deinem Board
funktionieren oder hast Du schon an den Fuse herumgespielt ?!?!?!?.
Obwohl dann wäre auch eine übertragung des Programms nicht möglich.Hmmm.
Richtiges programm an den Uc geschickt?
Versorgungsspannung OK?
Reset Pin richtig beschaltet?
An alle Pin's Vcc und GND angeschlossen die vorgeschrieben sind?
Hat schon mal was funktioniert auf den Board oder ist es der erste
Versuch dann könnte auch der Fehler am Board selber liegen Berdrahtung
Polung LED etc.
Am meisten ist es so das das Problem nicht der uC etc. ist sondern der
der davor sitzt.
Sorry ist nicht böse gemeint ist aber fast immer so.
Tom
../ATmega_Board.c:5: error: expected '=', ',', ';', 'asm' or
'__attribute__' before 'int'
make: *** [ATmega_Board.o] Error 1
Das ist das ergebis ein eror,jas hat schon ma ne HEX funktioniert, da
sollten sie auch blinken, find die aber nicht mher, hab das aber dann
nachgemessen, und die Spannung schwankte dann immer also -> Blinken!
aber der Code geht nich.
Huhn schrieb:
> ../ATmega_Board.c:5: error: expected '=', ',', ';', 'asm' or> '__attribute__' before 'int'> make: *** [ATmega_Board.o] Error 1
Grundsätzlich
Wenn dir ein Code Fehler gibt, dann zeig den Code!
Selbst dann wenn dir wer den Code hier im Forum gibt.
unsigned int i,t
Da fehlt ein Strichpunkt
unsigned int i,t;
for(i=0,i=65000;i++)
Da ist ein Komma fehl am Platze, und die Abbruchbedingung ist eine
Zuweisung und kein Vergleich
for(i = 0; i == 65000; i++ )
(Genau aus dem Grund mach ich gerne Leerzeichen vor Operatoren. Da sieht
man sowas nämlich besser.
Huch, in dem Code ist ja noch jede Menge anderes Zeugs falsch!
Hallo Huhn,
in der oben angegeben for-Schleife ist wie schon richtig angemerkt nen
Fehler. Da man gerade so einen leicht übersieht und sich gern tot sucht
->
1
for(i=0;i==65000;i++){};
Also statt dem Komma nach dem i=0 ein ;
Such mal in deinem Projektverzeichnis nach einer Datei mit der Endung
.lss !
Die öffnest du und kopierst uns den Inhalt hier ins Forum ;)
Das ist der Assemblercode den der Compiler aus deinem C-Code generiert.
MfG
Molch
edit:
Danke @ KH, bei mir war auch noch nen Fehler drin.
@Karl Heinz:
1. dumme Anfängerfrage:
Warum "volatile"? Hier wird doch nicht mit ISR's gearbeitet.
2. dumme Anfängerfrage:
Bringt uint16_t statt unsigned int zur besseren Lesbarkeit und
Klarstellung, dass man einen 16bit Wert haben will etwas?
Würde sich als Alternative zu den Schleifen nicht auch folgendes
anbieten?
Georg Werner schrieb:
> @Karl Heinz:>> 1. dumme Anfängerfrage:>> Warum "volatile"? Hier wird doch nicht mit ISR's gearbeitet.
mit ISR nicht.
Aber rate mal, was ein Optimizer mit
for( i = 0; i < 65000; i++ )
;
machen wird :-)
Wenn ich den Compiler aber zwinge, jeden Zugriff auf i, den ich
programmiere, auch tatsächlich im Code zu belassen, kann er die Schleife
nicht wegoptimieren.
>> 2. dumme Anfängerfrage:>> Bringt uint16_t statt unsigned int zur besseren Lesbarkeit und> Klarstellung, dass man einen 16bit Wert haben will etwas?
Bei unsigned int ist erst mal nicht klar, wieviele Bits das tatsächlich
sind. Der Compiler sucht sich eine Bitbreite, die ihm (und der CPU
genehm ist). Auf PC's ist ein unsigned int heutzutage 32 Bit breit. Und
die Erweiterung auf 64 Bit steht schon in den Startlöchern.
Ein uint16_t hingegen ist immer 16 Bit breit. Egal auf welcher CPU
> Würde sich als Alternative zu den Schleifen nicht auch folgendes> anbieten?
Klar. Wäre auch die bessere Lösung.
Aber der TO hat auch so schon genug zu kämpfen :-)
Hallo Community!
Ihr habt mir den oben genannten Code gegeben, mit vielen Fehlern, aus
meiner guten C++ Erfahrung hab ich mal etwas gesucht nachdem ich mehrere
Fehler hatte. Als ich dann soweit war, und alles lief fiel mir die
Schleife auf, ich hatte hier im Forum mal gelesen, dass es nicht gerade
geschickt ist eine verzögerung mit for aufzurufen, hab jetzt was mit
delay gemacht, und alles funktioniert, die LED leutet, bzw sie blinkt
jetzt sehr Hektisch, und ich kann endlich mein Testboard weitermachen.
Ich hab mir ein Testboard auf eine gesammte Lochrasterplatine gemacht
und diese so ziemlich perfekt ausgefüllt, also hab fast keinen platz
mehr.
Ich meld mich dann mal wieder, wenn ich was wissen will.
Danke an alle die mir es ermöglicht haben diese Platine zu proggen!!
DANKE