PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Komische Spannung am Ausgang eines Atmega



wisda.noobie
30.11.2009, 12:56
Hallo,
ich habe folgendes Problem:
ein atmega 32 soll signale ein einen motortreiber (L293D) weitergeben.
Jetzt funktioniert allerdings nicht mehr wie es soll, der motor dreht sich nicht. Am Ausgang des Atmega, der mit den EN eingang des Motortreibers verbunden ist, messe ich eine spannung von 0,7V, es sollten aber 5V anliegen. Wodran könnte das liegen?

Mfg Wisda.noobie

askazo
30.11.2009, 12:59
Bitte ein bißchen mehr Information.
- Welcher Ausgang?
- Quellcode?
- Schaltplan?

Gruß,
askazo

wisda.noobie
30.11.2009, 13:03
Schaltplan ist im Anhang, hier der Quellcode:



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

#define high(MOT) (PORTC |= (1<<(MOT)))
#define low(MOT) (PORTC &= ~(1<<(MOT)))
#define enhigh(EN) (PORTD |= (1<<(EN)))
#define enlow(EN) (PORTD &= ~(1<<(EN)))

#define MOT1 PC6
#define MOT2 PC7
#define EN1 PD5
#define F_CPU 1000000
#define TASTER PD3
#define TASTER_1 (PIND & (1<<TASTER))




int main(void)
{



DDRD = (1 << DDD0) | (1 << DDD1) | (1 << DDD4) | (1 << DDD5) | (1 << DDD6); //PD 0,1,4,5,6 Als ausgänge, alle anderen als Eingänge
DDRB = (1 << DDB0) | (1 << DDB1); // PB 0,1 als ausgänge, alle anderen als eingänge
DDRC = (1 << DDC4) | (1 << DDC5) | (1 << DDC6) | (1 << DDC7); // PC4,5,6,7 als Ausgänge, alle anderen als Eingänge

//Motor 1 - Eingänge: PC7, PC6
//Motor 1 - Enable: PD4
//Motor 1 - LED: PB0

//Motor 2 - Eingänge: PC5, PC4
//Motor 2 - Enable: PD5
//Motor 2 - LED: PB1

//Taster hinten: PD2
//Taster Vorne: PD3

//LED Kollision: PD6
//LED OK: PD1
//LED FEHLER: PD0





while(1)
{

{
PORTC = PINC ^ ( 1 << PC7 );
PORTC = PINC ^ ( 0 << PC6 );
PORTD = PIND ^ ( 1 << PD4 );
PORTB = PINB ^ ( 1 << PB1 ); //Motor1 vorwärts, LED an




}


}

return 0;
}






ich vermute ja irgendwie einen Kurzschluss, kann aber nichts derartiges finden...

Es geht jetzt speziell um den pin PC7, der als ganz normaler ausgang genutzt wird.

gerade ist mir auch aufgefallen, dass der pin 4 (OC1B) 2,5V liefert....


mfg wisda.noobie


Edit: schaltplan vergessen ](*,)

askazo
30.11.2009, 13:38
Hm, da fällt mir jetzt erst mal nur eins auf:
Du hast den RESET-Pin nicht beschaltet. Der sollte auf jeden Fall einen PullUp (10kOhm) gegen Vcc bekommen, idealerweise noch ein C (100nF) gegen Masse.

Gruß,
askazo

Hubert.G
30.11.2009, 15:24
Kannst du erklären was du hier machst?
PORTC = PINC ^ ( 1 << PC7 );
PORTC = PINC ^ ( 0 << PC6 );
PORTD = PIND ^ ( 1 << PD4 );
PORTB = PINB ^ ( 1 << PB1 ); //Motor1 vorwärts, LED an

wisda.noobie
30.11.2009, 15:29
die entsprechenden pins auf high/low setzen...oder ist das falsch? habe im programmieren noch nicht so viel erfahrung...

mfg wisda.noobie

Hubert.G
30.11.2009, 15:38
Das ^ ist ein Exclusiv-Oder .
ein (0<<PC6) bewirkt nichts
Lies dir das Port setzen und löschen mal hier durch:
www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports

TomEdl
30.11.2009, 16:28
Ist JTAG aktiv?

Grüße
Thomas

wisda.noobie
30.11.2009, 16:29
nee, jtag ist aus...es sei denn jtag wär standartmässig aktiviert aber das is sehr unwarscheinlich

TomEdl
30.11.2009, 16:31
JTAG ist standardmäßig bei der Auslieferung des AVR's aktiv. Lies doch einfach mal die Fuses aus, dann siehst du gleich was Sache ist.

Grüße
Thomas

wisda.noobie
30.11.2009, 16:36
JTAGEN ist bei Ponyprog mit einem Häkchen versehen....das bedeutet JTag ist an, oder?

Hubert.G
30.11.2009, 16:44
Ja, JTAG ist an.

TomEdl
30.11.2009, 16:47
Laut diesem Tutorial (http://www.mikrocontroller.net/articles/Pony-Prog_Tutorial) sind die Fuses invertiert. Das bedeutet:
1 = 0
0 = 1
(Eine Eins steht für gesetztes Häckchen)

In deinem Fall ist JTAG also deaktiviert.

Mit welchem Strom wird denn der entsprechende Ausgang eigentlich belastet?

Grüße
Thomas

wisda.noobie
30.11.2009, 16:52
zauber zauber, ich habe das häkchen mal weg gemacht und *pling* schon habe ich 4,7 V am ausgang...so soll es sein... vielen dank für die Hilfe!!

TomEdl
30.11.2009, 17:04
zauber zauber, ich habe das häkchen mal weg gemacht und *pling* schon habe ich 4,7 V am ausgang...so soll es sein... vielen dank für die Hilfe!!
Also doch nicht invertiert? :-k

wisda.noobie
30.11.2009, 17:06
hmm...nee anscheinend nicht

TomEdl
30.11.2009, 17:11
Dann stimmt da was anscheinend nicht mit dem Tutorial. Sollte man vielleicht ändern oder mal überprüfen, nicht das da noch andere auf die falsche Fährte gelockt werden...

Grüße
Thomas

Richard
30.11.2009, 17:17
Laut diesem Tutorial (http://www.mikrocontroller.net/articles/Pony-Prog_Tutorial) sind die Fuses invertiert. Das bedeutet:
1 = 0
0 = 1
(Eine Eins steht für gesetztes Häckchen)

In deinem Fall ist JTAG also deaktiviert.

Mit welchem Strom wird denn der entsprechende Ausgang eigentlich belastet?

Grüße
Thomas

G******

Nee umgekehrt in diesem fall ist JTAG aktiviert. Das ist echt gemein
mit inverser Logik. Wenn im Register eine 0 steht ist eingeschaltet,
steht im Register eine 1 ist ausgeschaltet. ;-(

Gruß Richard

TomEdl
30.11.2009, 17:21
G******

???



Nee umgekehrt in diesem fall ist JTAG aktiviert. Das ist echt gemein
mit inverser Logik. Wenn im Register eine 0 steht ist eingeschaltet,
steht im Register eine 1 ist ausgeschaltet. ;-(

Ganz so durchgeblickt hab ich da noch nicht, aber ich benutze ja auch kein PonyProg. Also war ich mit sowas noch nie konfrontiert...

Grüße
Thomas
;)