Archiv verlassen und diese Seite im Standarddesign anzeigen : Komische Spannung am Ausgang eines Atmega
wisda.noobie
30.11.2009, 13: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
Bitte ein bißchen mehr Information.
- Welcher Ausgang?
- Quellcode?
- Schaltplan?
Gruß,
askazo
wisda.noobie
30.11.2009, 14: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 ](*,)
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, 16: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, 16: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, 16: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
Ist JTAG aktiv?
Grüße
Thomas
wisda.noobie
30.11.2009, 17:29
nee, jtag ist aus...es sei denn jtag wär standartmässig aktiviert aber das is sehr unwarscheinlich
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, 17:36
JTAGEN ist bei Ponyprog mit einem Häkchen versehen....das bedeutet JTag ist an, oder?
Hubert.G
30.11.2009, 17:44
Ja, JTAG ist an.
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, 17: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!!
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, 18:06
hmm...nee anscheinend nicht
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
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
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
;)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.