Forum: Mikrocontroller und Digitale Elektronik AVR Studio 5., Ardunio Uno ATMega168, Inputs funktionieren nicht


von Matin (Gast)


Lesenswert?

Hallo liebe Mikrocontroller-Gemeinde,

ich versuche schon seit ein paar Tagen mein Arduino-Board über
AVR Studio 5 zu programmieren. Ich habe es derweilen auch hinbekommen, 
dass ich aus dem AVR Studio den Mikrocontroller flashen kann, da ich 
über die Funktion der externen Tools den Arduino Hex Uploader nutze. Nur 
schaffe ich es nicht, egal was ich mache, einmal ein INPUT zu 
generieren. Im Folgenden habe ich meinen sehr einfachen Code mal 
angehangen. Evtl. weiß ja von euch jem. ob ich was falsch mache und wenn 
ja, was ich falsch mache;-)

Gruß Martin


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


int main(void)
{

  DDRB= 0B00100000;
  PORTB|= 0B11011111;


    while(1)
    {

    if  (PINB4==1)
    PORTB |=(0x01 << PB5);
    else
    PORTB &= (0B11011111);


    }
}

PS: Bei dem Board handelt es sich meines Wissens nach um ein zum Atmel 
UNO baugleiches Board. Also ein Arduino Uno Atmel Atmega mit einem 
ATMEGA168

von Krapao (Gast)


Lesenswert?

>    if  (PINB4==1)

if ( (PINB & (1<<PINB4)) )

PUNB4 ist nur die Bitnummer.

Das Einlesen des Ports geht über das 8-Bit Register PINB und das 
Abfragen des Pins über die &  (Bitweise UND) Verknüpfung. Mehr im 
Artikel Bitmanipulation.

Wenn das halbwegs klappt und du dich fragst, wieso nur halbwegs, dann 
den Artikel Entprellung lesen.

Im Schaltplan 
(http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf) kann 
ich nicht sehen, wie der Schalter/Taster an PINB4 und die LED an PB5 
angeschlossen sind, daher habe ich das nicht kontrolliert. Muss du 
selbst machen. Stichworte sind hier ob active-low oder active-high 
Schaltung bei den LEDs verwendet wir und ob interne oder externe Pull Up 
oder Pull Down Widerstände nötig sind. Das kann man im 
AVR-GCC-Tutorial bei IO&Tastern&Schaltern nachlesen.

von Krapao (Gast)


Lesenswert?

PUNB4 => PINB4 (zu dicke Wurstfinger)

von g457 (Gast)


Lesenswert?

> was ich falsch mache

> if  (PINB4==1)
       ^^^^^^^^

..wertet nach 'unwahr' aus.

HTH

von Matin (Gast)


Lesenswert?

Hallo zusammen,

vielen Dank für die super Antworten.
Jetzt funktioniert es;-)

Die Zeile     if ( (PINB & (1<<PINB4)) )     bewirkt wahre Wunder;-)

Gruß Martin

von Georg L (Gast)


Lesenswert?

Hallo Matin!

Ich hab auch ein Arduino Uno und möchte das mit AVR Studio 5 
programmieren.
wie hast du das genau gemacht, damit es mit AVR-Studio funktioniert?

Georg

von andere Martin (Gast)


Lesenswert?

Du kannst von AVRStudio 5 her mit jedem Proger (USBasp, USBisp usw.) 
flashen voraussetzung ist du benutzt eine "externe Tool" zum 
programmieren z.B. oder in meinem Fall wäre AVRDUDE.

In AVRStudio 5 gehst du unter Tools\External Tools dann Add, dann
Command: C:\WinAVR-20100110\bin\avrdude.exe (in meinem Fall)

Arguments: Arguments: -e -P usb -c avrispmkII -p ATmega8535 -e -U 
flash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":a

Wobei bei dir sollte statt avrispmkII arduino stehen (glaube ich).

Fertig.

von Krapao (Gast)


Lesenswert?

> Ich hab auch ein Arduino Uno und möchte das mit AVR Studio 5
> programmieren.

Auf dem Arduino Uno ist ein Atmega328 drauf und in dem ist ein 
Bootloader.

Zur Kommunikation zwischen PC (AVR Studio) und Atmega328 (Bootloader) 
kann man - wie es in der Arduino IDE auch gemacht wird - das Programm 
AVRDUDE benutzen.

AVRDUDE ist sowohl in WinAVR (der alten AVR-GCC-Toolchain für 
Windows), der neuen AVR-Toolchain für AVR Studio und in der Arduino IDE 
vorhanden. Wenn man die unten verlinkte Anleitung benutzt, empfiehlt 
sich die Installation der Arduino IDE.

Den Aufruf von AVRDUDE macht man als Externes Tool aus AVR Studio 
heraus.

Dabei muss man dem AVRDUDE eine Kommandozeile angeben. Und da wird es 
'haarig':

Man muss wissen, an welcher virtuellen seriellen Schnittstelle das 
Arduino UNO hängt (Nachsehen im Gerätemanager unter LPT&COM) und wie das 
Resultat des Kompiliervorgangs heisst (Pfad und Name der .HEX).

Damit kann man eine Kommandozeile bauen:
Siehe Punkt 4- Configure the programmer bei
http://www.jayconsystems.com/forum/viewtopic.php?f=15&t=18

von Krapao (Gast)


Lesenswert?

ADD: Wenn man auch die Arduino-Biblitheken in AVR Studio benutzen will, 
dann gibt es eine Anleitung bei der AVR-Freaks: 
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=874597

von Georg L (Gast)


Lesenswert?

danke für eure hilfe. das hat mir schon sehr weiter geholfen.

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.