Forum: Compiler & IDEs WinAVR Anfäger Probleme


von manu (Gast)


Angehängte Dateien:

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..!

von Thorsten (Gast)


Lesenswert?

Was soll er denn deiner Meinung nach tun?

von manu (Gast)


Lesenswert?

Naja, eigentlich sollte er den PORTB invertieren!?

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

von Sebastian (Gast)


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.

von Sebastian (Gast)


Lesenswert?

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

von Matthias (Gast)


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

von manu (Gast)


Angehängte Dateien:

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!

von Thorsten (Gast)


Lesenswert?

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

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Hi

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

Matthias

von manu (Gast)


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!

von manu (Gast)


Lesenswert?

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

von Sebastian Schildt (Gast)


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.

von manu (Gast)


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.

von Sebastian (Gast)


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

von Matthias (Gast)


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

von Sebastian (Gast)


Lesenswert?

ups...
ich glaube mich erinnern zu können. Da hast du wohl war.

von manu (Gast)


Lesenswert?

hi nochmal,

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

von Sebastian (Gast)


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"
             ::);
}

von manu (Gast)


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!

von Jörg Wunsch (Gast)


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.

von T.Stütz (Gast)


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

von Jörg Wunsch (Gast)


Lesenswert?

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

von manu (Gast)


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...

von Jörg Wunsch (Gast)


Lesenswert?

Dann nimm einen neuen Chip.

von manu (Gast)


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!

von Robert (Gast)


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

von manu (Gast)


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.. ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.