Forum: Mikrocontroller und Digitale Elektronik MyAvr mk2 Problem


von Robin F. (gehacktes)


Lesenswert?

Schönen guten Abend,

ich bin frisch auf Apple umgestiegen und bin gerade dabei meinen MyAvr 
mk2 Programmer einzurichten. Nun habe ich im Internet einwenig gestöbert 
und bin hier auf eine gute Anleitung gestoßen 
Beitrag "Mac OSX und AVR".
So nun habe ich das alles so gemacht wie es dort steht. Habe mir hier 
die Treiber geladen 
http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx 
und alles eingerichtet wie es in der Anleitung geschrieben ist. Jetzt 
kam aber das Problem das er mir im Terminal ein ERROR ausgegeben hat. 
Das habe ich weg bekommen, indem ich aus dem  -c avr910 -P 
/dev/tty.SLAB_USBtoUART was in die makefile geändert werden sollte in 
ein    -c avr911 -P /dev/tty.SLAB_USBtoUART  geändert. Aber das Problem 
ist, das trotz ohne Fehler die LED nicht Blink was sie es jetzt eig. 
sollte.

Der Code ist wie volgt:

#include <avr/io.h>
#include<util/delay.h>

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

    while(1){
        DDRB=0x01;
        _delay_ms(50);
        DDRB&=~0x01;
        _delayl_ms(50);
    }
    return 1;
    }

Kann mir vlt. irgendwer helfen?
Weiß nicht was ich falsch mache?_?

Vielen Dank im voraus!

Liebe Grüße

von holger (Gast)


Lesenswert?

while(1){
        PORTB |= 0x01;
        _delay_ms(50);
        PORTB &= ~0x01;
        _delayl_ms(50);
    }

von Robin F. (gehacktes)


Lesenswert?

Wooooooahhhhh.... bis auf den Schreibfehler klappt das :).

Aber warum hat das anders nicht geklappt? Müsste es normal so nicht auch 
klappen?

von Helfer (Gast)


Lesenswert?

Schreibfehler ist gut. Wenn du beim Auto bloss zwischen erstem Gang und 
Rückwärtsgang schaltest, passiert auch nix (DDRB Setzerei der 
Datenrichtung). Wenn du mit eingelegtem Gang das Gaspedal trittst oder 
loslässt schon (PORTB Setzerei des Ausgangspegels).

von Helfer (Gast)


Lesenswert?

Add:

>    while(1){
>        DDRB=0x01;
>        _delay_ms(50);
>        DDRB&=~0x01;
>        _delayl_ms(50);
>    }

Probiere mal diesen Code mit dieser Hardware (active-low LED Schaltung):

              R      LED
PB0 o-------###------|<------o Vcc

Dann passiert auch was, weil DDRB=0x01; den Ausgang auf LOW setzt, d.h. 
der durch den Vorwiderstand begrenzte Strom von Vcc durch die LED nach 
PB0 (=GND) fliessen kann. Und weil DDRB&=~0x01; den PB0 als Eingang 
konfiguriert, d.h. hochohmig macht. Der minimale Reststrom durch die LED 
reicht dann nicht fürs Leuchten.

Mit der active-high Variante passiert nix, weil mit obigem Code an PB0 
nie ein HIGH Pegel erzeugt wird.

              R      LED
PB0 o-------###------>|------o GND

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.