Atmega32 problem mit programmierung in C

Gast #1248511
Lesenswert?

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
Gast #1248895
Lesenswert?

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
Gast #1249577
Lesenswert?

1
#include <avr/io.h>
2
unsigned int i,t
3
int main(void)
4
{
5
  DDRB=0xFF;
6
  while(1)
7
  {
8
      PORTB=0xff;
9
      for(i=0,i=65000;i++)
10
      PORTB=0x00;
11
      for(i=0,i=65000;i++)
12
  }
13
}

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
Gast #1251685
Lesenswert?

../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.
#1251692
Lesenswert?

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!
Persönliche Seite #1251694
Lesenswert?

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.
#1251921
Lesenswert?

@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?
1
#include <util/delay.h>
2
...
3
_delay_ms(500);
4
...

cu
Georg
#1252325
Lesenswert?

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 :-)
Gast #1253606
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren