mikrocontroller.net

Forum: Compiler & IDEs WinAVR Anfäger Probleme


Autor: manu (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen..

Wollte jetzt doch mal versuche mit dem WinAVR und AVR Studio starten..

Habe mir ein kleines Programm (test.c) geschrieben, das Makefile dazu
angepasst und dann mit make, im selben Vrz. das HEX erzeugt.
Dieses habe ich dann auf meinen "kleinen" Mega8 drauf gepackt,
aber er tut leider nichts.. :-(

Hier die Dateien:

-- test.c --
#include <avr/io.h>
#define SYSCLK 4000000

int main(void)
{
    DDRB = 0xff;
    PORTB = 0xff;

    while(1)
    {
        PORTB = 0x00;
        PORTB = 0xFF;
    }

    /* NEVEREACHED */
    return (0);
}
-- ENDE --

Das Makefile habe ich mal angehängt, ist mit MFile generiert,
evt. liegt ja da der Hund begraben?

Habe mir das GCC-Tut schon angeschaut..

Danke für eure Hilfe..!

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll er denn deiner Meinung nach tun?

Autor: manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, eigentlich sollte er den PORTB invertieren!?

Habe mir das Signal mit nem Oszi angeschaut, leider nichts ..

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du das ganze nur so kurz machst wird man vielleicht nicht viel
sehen können und aßerdem bin ich mir nicht sicher ob das so geht wie du
es geschrieben hast... das ist eher das codevision usw. code

-- test.c --
#include <avr/io.h>
#define SYSCLK 4000000

int main(void)
{
    outp (0xff,DDRB);
    outp (0xff,PORTB);

    while(1)
    {
       outp (0x00,PORTB);
       outp (0xFF,PORTB);
    }

    /* NEVEREACHED */
    return (0);
}

probier das mal so... glaube die PORTx DDRx usw kann man so nicht
verwenden.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
empfehlenswert sind auf jedenfall die beispiele, die man hier in auf der
gcc installations-hilfe seite runterladen kann ... das gcctest.zip

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

@manu
Also wenn ich dein Programm mit deinem Makefile übersetze kann ich das
Programm im AVRStudio simulieren und der PortB toggelt auch. Ich
vermute also du hast ein Hardware/Softwaredownload Problem.

@Sebastian
Das was du da als AVRGCC-Code verkaufst war vor Jahren noch nötig. In
der nächsten Version von WINAVR werden diese Makros schon garnichtmehr
unterstützt.

Matthias

Autor: manu (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi zusammen,

hmm.. komisch.. Wenn ich ein anderes, Test Programm von mir (allerdings
Assembler) auf den µC Lade läuft es..

Habe auch schon versucht, das ganze im AVRStudio zu simulieren,
allerdings stürzt es beim öffnen der Datei ab.. :-(

Habe mal mein HEX File angehängt, erzeugt mit meinem oben geposteten
Code..

Evt. kannst du es ja mal mit deinem vergleich, Matthias!

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich kann das Hex File mit AVR Studio 4.10 problemlos öffnen, es
macht auch das was es soll.

Autor: Matthias (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi

@manu
Die Dateien sind nicht identisch. Im Anhang mal mein HEX-File.

Matthias

Autor: manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man beim "neuen" AVR Studio auch direkt mit HEX Files simulieren?
.. Lade es gerade mal schnell runter, ich habe noch eine 3er Version!

Das HEX File habe ich mit meinem Yaap Programmer auf dem MEGA8 kopiert,
lief alles ohne Fehler. Seltsam!

Autor: manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe nun das 4er AVR Studio und soeben meine HEX und die von
Matthias durch Simuliert.
Im Simulator scheinen beide zu funktionieren!

Autor: Sebastian Schildt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermutung:
Auf dem realen AVR ist das evtl. viel zu schnell, entweder kommt die
Port Elektronik des AVR nicht hinterher, wenn man nur
"speed-togglet", oder das OSZI kann nix.

Ich würde mal ein dickes Delay zwischen die beiden PORTB= packen und
nochmal schauen.

Autor: manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, eigentlich sollte er das schon können, oder?
In Assembler packet er das ja auch...

Das OSZI kann das schon, wenn ich an den Quarzoszillator gehe,
sehe ich auch das Signal.. Es kann eigentlich bis 100MHz messen.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Matthias
das tut mir aber jetzt furchtbar... sorry

vor einiger zeit hatte ich mal wurde diese thema schon mal diskutiert
und damals hieß es daß z.B. PORTx=0x?? kein ansi c ist und auch nicht
vorgesehen ist diese art der syntax zu implementieren. (genau wie die
0b???????? schreibweise)

sorry.. bin wohl nicht mehr auf dem aktuellsten stand

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

du verwechselst da was. Die Diskusion ging um

PORTB.1 = 1;
     ^^

Also dirkte Zuweisung an ein Bit. Das geht mit dem AVRGCC tatsächlich
nicht da es kein ANSI-C ist. Zuweisungen an einen ganzen Port sind
dagegen kein Problem.

Matthias

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ups...
ich glaube mich erinnern zu können. Da hast du wohl war.

Autor: manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi nochmal,

hat jemand zufällig nen Mega8 ruliegen, mit dem man den Code austesten
könntet? Weiß wirklich nimmer weiter..

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du das mit den delays schon getestet???
oder mal nen anderen Port??
while(1)
{
        PORTB = 0x00;
        asm volatile("nop\n\t"
             "nop\n\t"
             "nop\n\t"
             "nop\n\t"
             "nop\n\t"
             "nop\n\t"
             "nop\n\t"
             "nop\n\t"
             ::);

        PORTB = 0xFF;
         asm volatile("nop\n\t"
             "nop\n\t"
             "nop\n\t"
             "nop\n\t"
             "nop\n\t"
             "nop\n\t"
             "nop\n\t"
             "nop\n\t"
             ::);
}

Autor: manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, habe am Wochenende noch das mit den Delays und mit dem PORTC
getestet... Natürlich kein Erfolg.. :-(

Ich habe nach dem Programmieren mal alles aus dem Flash + EEPROM
zurückgelesen, steht genau das drinnen, was drin stehen soll!

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun, also entweder schafft's dein Oszi wirklich nicht, oder dein Chip
ist kaputt.

Ganz davon abgesehen, Port B, du bist dir sicher, dass du nicht gerade
PB3...PB5 benutzt zum Testen?  Das sind die Pins für den ISP-
Programmer, wenn der noch dran ist, klemmt der u. U. die Signale auf
sein Potenzial.

Autor: T.Stütz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Compiler optimiert for Size (siehe Compilerswitch in Makefile)
Der macht vermutlich aus

PORTB=0x00;
PORTB=0xFF;

eine Zeile.
Schau dir mal das Assemblerlisting an !

Gruss

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein.  Die Port-Register sind als `volatile' deklariert, alles andere
wäre ja auch wirklich unsinnig.

Autor: manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den ISP Programmer habe ich natürlich abgehängt, und danach einen reset
vom AVR gemacht.
Ich habe alle PINs vom PORTB durchgemessen, ohne erfolg...

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann nimm einen neuen Chip.

Autor: manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe zwei MEGA8 hier aufgebaut, bei beiden gehts nicht.. Werde heute
abend mal einen neuen "aus der Schachtel" nehmen, und es nochmal
versuchen.. Danke erstmal!

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wie sieht den der Startup Code vom Compiler aus? Vielleicht fehlen
Initialisierungen? Prüf doch mal ob die Pins überhaupt auf Ausgang
stehen. (z.B. über einen 4k7 auf einen Pegel legen und messen ob der
Pin Strom liefert) Wg. der delay diskussion würde ich einfach den port
mit einem Zähler versorgen, dann sollte man ja was sehen können.

Robert

Autor: manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

eine freudige Nachricht, "es funktioniert" ..  Sorry, dass ich eure
Zeit vergoldet habe, meine 2 Mega's waren wirklich Defekt..
Da hätte ich auch selber drauf kommen können .. :-(
Ich habe dies eigentlich ausgeschlossen, da ich nicht geglaubt habe,
dass beide (auf verschiedenen Testboards verbaut) defekt sind.
Vorallem, Programmieren usw. hat ja noch geklappt...

Naja, wichtig ist, dass es jetzt klappt.. ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.