PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit PWM



XBert
17.11.2008, 19:23
Hi Leute,

Ich hoffe einer von euch kann mir mit meinem Problem helfen.
Ich habe in meiner Schaltung einen AtMega128 verbaut und kann ihn auch ganz normal via PonyProg programmieren.
Doch leider funktioniert das ganze nicht so wie es soll.
Es kommt nämlich bei keinem Pin ein Ausgangssignal
Achja die serielle Schnittstelle ist an USART1.

MFG XBert

McJenso
17.11.2008, 20:06
Hallo,

hast du mal mit einem einfachen kleinen Programm die Ausgänge gesetzt? Versuch das mal, damit man den Fehler eingrenzen kann.
Mir sind zwei Sachen aufgefallen.


uint16_t Pulslength[40]; // !!! // array for all delays

ändere bitte in


volatile uint16_t Pulslength[40]; // !!! // array for all delays




TIMSK |= _BV(TOIE2) | _BV(TOIE1);

Warum TOIE2, verschweigst du uns etwas? Timer2 wird nicht gestartet.

Gruß

Jens

XBert
17.11.2008, 20:14
Das einzige was ich verschwiegen habe ist, dass der Code komplett von hier (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=14220&highlight=servo) ist, und nur ein paar kleine Änderungen vorgenommen wurden

MFG

McJenso
17.11.2008, 20:42
Hallo,

keine Ahnung warum das TOIE2 Bit gesetzt wird. Nimm es raus.
Teste mal die Hardware mit einem kleinen Programm, dass nur die Ausgänge setzt.

Gruß

Jens

XBert
18.11.2008, 15:09
So ich hab jetzt mal das folgende compiliert und übertragen:


#include <stdlib.h>
#include <inttypes.h>
#include <avr/io.h>

int main(void){
DDRA = 0xFF;
DDRB = 0xFF;
DDRC = 0xFF;
DDRD = 0xFF;
DDRE = 0xFF;
DDRF = 0xFF;

PORTA = 0xFF;
PORTB = 0xFF;
PORTC = 0xFF;
PORTD = 0xFF;
PORTE = 0xFF;
PORTF = 0xFF;

while(1){

}
}

Aber leider bekomm ich an keinem Ausgang einen Pegel von ca 5v

Wo könnte das Problem sein??

Ach ja was noch zu erwähnen ist: Hatte vergessen das Compability-Fuse nicht zu setzen, funktioniert aber trotzdem nicht


MFG XBert

McJenso
18.11.2008, 18:14
Hallo,

überprüfe bitte alle Versorgungsleitungen und die Resetverbindungen bei abgezogenem Programmieradapter gründlich. Auch die GND. Ich vermute einen Fehler in diesem Bereich. Bei den Fusebits den Brown out und Watchdog always on erst einmal deaktivieren. Woher kommen die 5V Versorgungsspannung.

Beim Programm ist mir noch etwas eingefallen.


void setservo(byte index, byte value)
{
uint16_t wert;

wert=MINPULS+(MAXPULS-MINPULS)/256*value;
cli(); //begin of atomic section
// callculate hightime
Pulslength[index<<1]=0-wert;

// sum of low and hightime for one servo is 2ms
Pulslength[(index<<1)+1]=0-(TIMER_MAXPULS-wert);

// 1 servos give you 1*2ms=22ms total cycle time /!!!

//sei(); end of atomic section
}


Es können sonst sporadische Fehler in der Interruptroutine auftreten. Bei näherem Interesse such im Wiki bitte nach 'Interrupts' und/oder 'atomar'.

Gruß

Jens

XBert
18.11.2008, 19:05
Die Versorgungspannung kommt von einem Netzteil das 4.85V liefert
Außerdem stecke ich die Schaltung nach dem Programmieren ab und verbinde sie erst dannach wieder mit dem Netzteil.

Aber ich werd das ganze noch mal durchmessen

MFG

XBert
19.11.2008, 13:05
Ach ja was mir noch aufgefallen ist, ist das die LED am eingang des MAX232 immer leuchtet auch wenn der Controller nur mit FF vollgeschrieben ist

MFG

McJenso
19.11.2008, 17:03
Hallo,

der Max mag Pullups im Eingang haben durch die die LED leuchtet. Sollte dann im Datenblatt stehen.
Ich kann dir sonst leider nicht weiter helfen. Für mich sieht die Situation so aus. Das Programm ist richtig. Der Controller lässt sich beschreiben, d.h. der Takt ist io. Die Beschaltung ist geprüft und für korrekt befunden. Die Ausgänge geben keine Spannung aus. Da bleibt für mich nur die bittere Diagnose, dass der AtMega hin ist.
Hast du wirklich die GND's genau geprüft. Mal eine LED mit Vorwiderstand an Plus und die GND's "abtasten". Und direkt die Füße am AtMega nehmen. Das und ein Fehler bei der Reset Beschaltung sind noch immer meine Favoriten.

Daumen drückender Gruß

Jens


Edit: Du gibst beim compilieren ja den richtigen Controller an? Ich weiß allerdings auch nicht was beim falschen passieren würde.

XBert
01.12.2008, 15:30
So ich meld mich mal wieder:

Ich hab in den letzten Tagen mal herumprobiert und bin auf etwas sehr seltsames gestoßen.
Irgendwie it am Resetpin durch irgendwas keine konstante Spannung sondern eine periodische Kurve.
Aber was noch seltsamer ist, ist das wenn ich ein schlechtes netzteil verwende und es wiederholt aus- und einstecke,
der Controller zu laufen beginnt und das Programm ausgeführt wird (jetzt blinken beide LEDs im 500ms Takt).
Wenn ich allerdings ein Labornetzteil verwende dann kan ich sooft ein und ausstecken wie ich will. Es tut sich nichts.

Ich hoffe es weiß jemand woran das liegen kann

MFG XBert

McJenso
01.12.2008, 16:19
Hallo,

bau mal C8 aus, schau ob du am Resetpin 5V hast und probiere es noch einmal.

Gruß

Jens

XBert
02.12.2008, 18:58
Hi

Ich hab jetzt mal den C8 ausgelötet, aber es tut sich nichts, obohl am reset-pin 5v sind.
Der µC ließ sich dannach nicht mehr programmieren. Dann hab ich noch den 10k ausgelötet-> wieder nichts.
Also das ganze wieder eingelötet und am reset-pin sind saubere 5v und es läßt sich noch immer nichts programmieren.
Ach ja der C8 ist beim auslöten abgebrochen [SMD], deshalb hab ich ihn durch einen anderen ersetzt.

MFG XBert

McJenso
02.12.2008, 20:16
Ach herje,

also den Kondensator braucht man eigentlich nicht. Nun, ich kann dir nicht mehr helfen. Mir fehlen die Ideen. Wenn am Rsetpin eine 'Kurve' und keine konstante Spannung anliegt, dann liegt der nicht fest auf einem Potential. Drücke dir die Daumen, dass du den Fehler noch findest.

Gruß

Jens

oberallgeier
02.12.2008, 22:30
Hallo Ihr Beiden,

soweit ich es sehe, ist der ISP falsch installiert. MOSI und MISO gehen vom Stecker nicht korrekt auf den µC sondern auf RxD und TxD (PE1 und PE0), sie sollten aber an PB2 (MOSI) und PB3 (MISO) gehen. Solls das gewesen sein?


... AtMega128 verbaut und kann ihn auch ganz normal via PonyProg programmieren ...... denn dann wäre das ja nicht möglich.

XBert, woran siehst Du, dass Du den µC "... ganz normal ... programmieren ..." kannst? Was läuft denn bei Deinem Controller? Welche Funktionen hast Du programmiert und wie erkennst Du deren korrekten Ablauf? Welche Meldungen gibt PonyProg bei/nach dem Flashen ab? Könntest Du mal einen Bildschirmdump von Deinen mit PonyProg ausgelesenen Fuses hier hereinstellen?

Viel Erfolg,

XBert
03.12.2008, 20:39
Isp ist nicht falsch, der ist beim Mega128 nämlich an den Pins die ich dafür belegt habe.

Leider kann ich im Moment keinen Screenshot posten weil das programmieren nicht mehr funktionierte, nachdem der Kondensator weg war(auch nicht als er wieder drinn war). Ich hab in anderen Schaltungen eben auch gesehn, dass der Reset-Pin direkt verbunden war.

Ich erkannte den korrekten ablauf des Programms kurzweilig daran, dass die beiden Leds im 500ms-Takt blinkten, so wie es im programm steht (nicht mehr das das ich oben hochgeladen habe).

Die Fuses sind bis auf Mega103-Compability Fuse alle standartmäßig

Ach ja: am Reset-Pin ist jetzt keine Kurve mehr sondern konstant 5v

MFG XBert

oberallgeier
03.12.2008, 21:28
Isp ist nicht falsch, der ist beim Mega128 nämlich an den Pins die ich dafür belegt habe ...Ok.