C Progamm funktioniert nicht

OP #2779503
Hallo ,
ich bin in den Anfängen brauche die einfachsten Ünterstüzungen.
Mein Problem:
Ich lade aus dem Programm Myavr "LED on" und brenne in das 
Microcontroller ATmega8 in C. Es funktioniert nicht.
Hier das Programm:
//----------------------------------------------------------------------
// Titel       : myAVR Beispiel "LED an" für den ATmega8/48/88/168
//----------------------------------------------------------------------
// Funktion    : Schaltet alle 3 LEDs an
// Schaltung   : PortB.0-2 an LEDs
//----------------------------------------------------------------------
// Prozessor   :
// Takt       : 3.6864 MHz
// Sprache     : C
// Datum       : 02.12.2005
// Version     : 1.3
// Autor       : Dipl. Ing. Päd. Alexander Huwaldt
// Programmer  : ...
// Port      : ...
//----------------------------------------------------------------------
#define   F_CPU 3686400  // Taktfrequenz des myAVR-Boards
#include  <avr\io.h>    // AVR Register und Konstantendefinitionen
//----------------------------------------------------------------------
main ()
{
  DDRB=0xFF;       //PortB auf Ausgang konfigurieren
  do
  {
    PORTB=0xFF;   // PortB High, LEDs on
  }
  while (true);    // Mainloop
}
//----------------------------------------------------------------------

In Assembler funktioniert das ganze einwandfrei.

Danke Dursun
#2779756
Das Programm macht doch keinen Sinn. Da werden doch nur die Ports High 
gesetzt, warum wird das in einer Schleife dauernd ausgeführt?

Dann das "true" ist wirklich komisch. Ersetze durch "1".

Wie testest du obs funktioniert? Was erwartest du?

gruß cyblord
#2779814
Peter K. schrieb:
> Nochmal gesamt:
>
>
1
> #include <avr/io.h
2
> 
3
> int main(void){
4
>    DDRB = 0xFF;
5
>    PORTB = 0xFF;
6
>    while(1){
7
> 
8
>    }
9
>    return 1; //Wird nie erreicht
10
> }
11
>

Ja man sieht schon du bist der Checker. Ans Ende gehört ein return 0, 
das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht 
wird. return 1 wäre ein Fehler.

gruß cyblord
#2779819
Warum ignorierst du alle Lösungsvorschläge und gehst weiter auf dein 
Programm ein? Das funktioniert nicht, das ist halt falsch und wieso, 
wurde hier bereits erwähnt. (true ist zum Beispiel ist dort nirgends 
definiert). Probiere doch mal die anderen vorgeschlagenen Programme und 
schau dir C-Tutorials an.
#2779821
> Ans Ende gehört ein return 0,
> das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht
> wird. return 1 wäre ein Fehler.

Ja, ok.
Das ist jetzt aber erst mal nicht mehr relevant.
Wird dieses Pgm für einen Mega8 compiliert, gelinkt und aufs Board 
gebrannt, müssen die Pins am PORTB alle auf 1 gehen.
#2779830
Peter K. schrieb:
> cyblord ---- schrieb:
>> Ja man sieht schon du bist der Checker. Ans Ende gehört ein return 0,
>> das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht
>> wird. return 1 wäre ein Fehler.
>>
>> gruß cyblord
>
> Aha, gruess mal meinen Bekannten von Atmel - das ist ein
> Originalquelltext von ihm.

Falsch bleibt falsch. Und wenn es der Papst geschrieben hätte.
#2779835
cyblord ---- schrieb:
> Peter K. schrieb:
>> cyblord ---- schrieb:
>>> Ja man sieht schon du bist der Checker. Ans Ende gehört ein return 0,
>>> das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht
>>> wird. return 1 wäre ein Fehler.
>>>
>>> gruß cyblord
>>
>> Aha, gruess mal meinen Bekannten von Atmel - das ist ein
>> Originalquelltext von ihm.
>
> Falsch bleibt falsch. Und wenn es der Papst geschrieben hätte.

Ist jetzt auch egal.
Persönliche Seite #2779839
cyblord ---- schrieb:
> Ja man sieht schon du bist der Checker. Ans Ende gehört ein return 0,
> das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht
> wird. return 1 wäre ein Fehler.

Das ist hier vollkommen irrelevant. Und der Laufzeitumgebung auf dem AVR 
ist das auch noch vollkommen wurscht.

Interessant ist die Schaltung, d.h. wie die LEDs mit den Portleitungen 
von PortB verbunden sind.
#2779844
cyblord ---- schrieb:
> Trotzdem wäre ein Blink-Programm fürs testen besser. Wenn die LED nach
> VCC geschaltet ist, sieht er nix. Ein Blinken wäre eindeutig.

Dann soll ers so machen.
1
#include <avr/io.h
2

3
int main(void){
4
   DDRB = 0xFF;
5
   PORTB = 0x55;
6
   while(1){
7
   }
8
}

Anstelle von 0x55 kann man auch 0xAA benutzen. Damit brennt auf jeden 
Fall jede 2.te LED (wenn man mal die naheliegende Annahme treffen kann, 
dass alle LEDs gleich verschaltet sind)
#2779848
Das Problem wird auch nicht am Programm liegen. Entweder das Kompilieren 
klappt nicht, oder das brennen oder die Verschaltung stimmt nicht. Dazu 
kommen noch die Fuses. Wer weiß das schon. Alles sehr wirr und vom TE 
kommt auch nix sinnvolles.
OP #2779870
so sieht jetzt das Programm aus:

//----------------------------------------------------------------------
// Titel       : myAVR Beispiel "LED an" für den ATmega8/48/88/168
//----------------------------------------------------------------------
// Funktion    : Schaltet alle 3 LEDs an
// Schaltung   : PortB.0-2 an LEDs
//----------------------------------------------------------------------
// Prozessor   :
// Takt       : 3.6864 MHz
// Sprache     : C
// Datum       : 02.12.2005
// Version     : 1.3
// Autor       : Dipl. Ing. Päd. Alexander Huwaldt
// Programmer  : ...
// Port      : ...
//----------------------------------------------------------------------
#define   F_CPU 3686400  // Taktfrequenz des myAVR-Boards
#include  <avr\io.h>    // AVR Register und Konstantendefinitionen
//----------------------------------------------------------------------
#include <avr/io.h

int main(void)
{
   DDRB = 0xFF;
   PORTB = 0x55;
   while(1){

   }
}
OP #2779873
hier das Programm in Assembler:

;----------------------------------------------------------------------
; Titel    : myAVR Beispiel "LED an" für den ATmega8
;----------------------------------------------------------------------
; Funktion    : eine LED wir angeschalten
; Schaltung    : PORTB.0=LED1
;----------------------------------------------------------------------
; Prozessor    : ATmega8
; Takt    : 3,6864 MHz
; Sprache    : Assembler
; Datum    : 09.11.2007
; Version    : 1.0
; Autor    : Stephan Hänsel
; Programmer  :
; Port    :
;----------------------------------------------------------------------
.equ  F_CPU,  3686400
.include  "AVR.H"
;----------------------------------------------------------------------- 
-
;Reset and Interruptvectoren  ;VNr.  Beschreibung
begin:
  rjmp  main  ; 1    POWER ON RESET
  reti    ; 2    Int0-Interrupt
  reti    ; 3    Int1-Interrupt
  reti    ; 4    TC2 Compare Match
  reti    ; 5    TC2 Overflow
  reti    ; 6    TC1 Capture
  reti    ; 7    TC1 Compare Match A
  reti    ; 8    TC1 Compare Match B
  reti    ; 9    TC1 Overflow
  reti    ;10    TC0 Overflow
  reti    ;11    SPI, STC Serial Transfer Complete
  reti    ;12    UART Rx Complete
  reti    ;13    UART Data Register Empty
  reti    ;14    UART Tx Complete
  reti    ;15    ADC Conversion Complete
  reti    ;16    EEPROM Ready
  reti    ;17    Analog Comperator
  reti    ;18    TWI (I²C) Serial Interface
  reti    ;19    Strore Program Memory Ready
;----------------------------------------------------------------------- 
-
;Start, Power ON, Reset
main:
  ldi  r16,lo8(RAMEND)
  out  ioSPL,r16
  ldi  r16,hi8(RAMEND)
  out  ioSPH,r16  ;init Stack
  sbi  ioDDRB,0
;----------------------------------------------------------------------- 
-
mainloop:
  wdr
  ldi  r16,0b00000001  ;LED ON
  out  ioPORTB,r16
  rjmp  mainloop
;----------------------------------------------------------------------- 
-

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.