PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Grundschaltung ISP



leva87x
09.04.2012, 15:23
Tag zusammen,
hab folgende grundschatung gebaut und den Code dazu geschrieben.

Es handelt sich hier um einen USB AVR LAB von ullihome als Programmer, der microcontroller ist ein atmega 8 den ich über ISP zu programmieren versuche. Der Compiler übersetzt den code problemlos, jedoch bringe ich die led nicht zum leuchten. weiß einer vorran es liegt.

Code:

#ifndef MCU // Welcher AVR genutzt wird, wird i.A. im Makefile definiert
#define MCU atmega32
#endif

#ifndef F_CPU // kann auch im Makefile definiert sein
#define F_CPU 1000000UL // Takt als LONG definieren, da zu groß für Integer
#endif

#include <avr/io.h> // Namen der IO Register
#include <util/delay.h> // Funktionen zum warten
// Achtung, damit delay richtig funktioniert muß mit Optimierung compiliert werden

int main(void)
{
DDRA = _BV(0); // Nur PC0 als output, _BV(0) = (1<<0) = 1
PORTA = 254; // Pullups auf allen anderen Pins

while (1)
{
PORTA &= 255-_BV(0); // 0 auf Bit 0 Ausgeben, Rest so lassen
_delay_ms(100); // 100 ms Warten
PORTA |= _BV(0); // 1 auf Bit 0 Ausgeben, Rest so lassen
_delay_ms(100);
}
}



mfg
Alex

Kampi
09.04.2012, 16:16
Hi,

also wenn du in deinen Code den richtigen Port schreibst funktioniert er ;)
Ich habe es gerade mal auf meinem RN-Control mit einem Mega32 und 16MHz getestet.
Du verwendest diese Zeile

DDRA
PORTA

aber schließt die LED an PortC an. Dann kann das nicht funktionieren ;)
Das hier ist der lauffähige Code. Die 100ms habe ich durch 1 Sekunde ersetzt, damit man das besser sieht.


/*
* AVRGCC2.c
*
* Created: 09.04.2012 17:03:22
* Author: Daniel
*/

#include <avr/io.h>
#include <util/delay.h> // Funktionen zum warten
#define F_CPU 16000000UL

int main(void)
{
DDRC = _BV(0); // Nur PC0 als output, _BV(0) = (1<<0) = 1
PORTC = 254; // Pullups auf allen anderen Pins

while (1)
{
PORTC &= 255-_BV(0); // 0 auf Bit 0 Ausgeben, Rest so lassen
_delay_ms(1000); // 1000 ms Warten
PORTC |= _BV(0); // 1 auf Bit 0 Ausgeben, Rest so lassen
_delay_ms(1000);
}
}


Alternativ kannst du den Code auch so schreiben:




while (1)
{
PORTC ^= 0x01;
_delay_ms(1000);
}



Das macht den Code etwas kleiner und du hast die selbe Funktion.

PS: Und er ist bischen übersichtlicher ;)

leva87x
10.04.2012, 17:14
Uppps, war ein copypaste fehler, weil ich davor mit port A versucht habe. Die Sache ist die,der Controller wird unter Avr Lab erkannt, kann auch die hex wählen und den controller Programmieren. Jedoch wenn ich start drücke gehen alle LEDs aus und nichts passiert mehr(Auch wenn ich die ziel ISP schaltung abklemme). Oder verstehe ich irgendwas falsch: Ich hab einen USB programmierer der hat als ausgang so einen ISP 10 pin stecker. Dann stecke ich den atmega 8 in da breadboard und bau die schaltung wie oben dargestellt auf. Jetzt verbinde die ISP Pins vom controller mit dem ISP stecker auf der Zeilschaltung. Und nun möchte ich über den Controller meine Zielschaltung programmieren. Verstehe ich das richtig oder funktioniert sowas nicht?

mfg alex

Hubert.G
10.04.2012, 20:34
Ganz klar drückst du dich nicht aus.
Du hast auf dem Breadboard die Schaltung von oben aufgebaut und möchtest den Kontroller darauf programmieren. Wenn dir dein Programmiertool (AVR-Studio?) sagt das verify ist OK, dann ist das Programm auch im Kontroller.

Kampi
10.04.2012, 22:13
Also da das Problem ganz offenbar nicht am Code liegt, muss der Fehler bei deiner Hardware sein.
Und wie Hubert schon sagt, wenn das Programmiertool auf dem PC sagt das der Verify in Ordnung ist dann ist da auch kein Fehler bei der Übertragung aufgetreten.
Check dies mal bitte und dann (falls es nicht ok ist) check mal deine Hardware durch.

leva87x
11.04.2012, 14:18
Also mein Controller hat 2 LEDs. eine status LED und eine PC Status LED. Wenn ich den Contoller anschließe. Leuchtet die gelbe Status LED. Wenn ich einen Code Programmiere(irgendwas simples wie z.b.


PortB.DataDirection.Bit3 = DataDirectionOutput;
PortB.Output.Bit3 = 1;

while(1)
.......

dann geht die Status LED aus und die Blaue PC Status LED geht an.
Und alles funktioniert wunderbar.

Wenn ich jedoch den oben beschriebenen Code einprogrammiere. Egal ob eine Zielschaltung angeschlossen ist oder nicht. Gehen alle LEDs aus und der controller ist nicht ansprechbar.
Woran liegt das?

Hubert.G
11.04.2012, 15:27
Am Code kann es nicht liegen, den hat ja Kampi getestet.
Als Programmer hast du das USB-LAB, was für ein Tool verwendest du? AVR-Studio?

leva87x
12.04.2012, 11:07
Jo der Programmer ist das usb lab, in avr studio schreib ich den code und die .hex lade ich mit dem avr tool

oberallgeier
12.04.2012, 12:34
Hi Alex,

hast Du nen makefile geschrieben? Könntest Du uns den mal bitte posten? Ich frage deswegen, weil ich im/fürs AVRStudio noch nie einen makefile geschrieben hatte - und das läuft trotzdem alles (bis auf Fehler die ich selbst mache). Warum ich frage? Welchen Takt hast Du im makefile eingestellt? Oder, deutlicher: schreib doch mal bitte, wie die fuses gesetzt sind. Vielleicht liegt da der Hund begraben (der im anglikanischen bug heisst, der Hund).

leva87x
12.04.2012, 12:48
Hallo,

also makefile habe ich keins geschrieben. Soweit ich weiß macht avr studio alles selber. Fuses ist schon ne andere sache. Hab nämlich keine gesetzt :) uppppps weiß auch nicht wirklich wie das gehen soll. Also früher wo ich mit dem STK 500 gearbeitet habe war ja im bezug auf Fuses alles selbstverständlich. Bei dem neuen Programmer weiß ich nicht genau wie es geht

oberallgeier
12.04.2012, 15:00
... makefile habe ich keins geschrieben ... früher ... STK 500 ... im bezug auf Fuses alles selbstverständlich ...Hmmmm. Frage: woher weiß A V R Studio daß Du keinen Quarz hast? Und woher weiß dieses Programm auf welche Frequenz Du den internen Oszillator eingestellt hast? Siehste - das musst Du dem irgendwie sagen.

Sieh doch mal nach unter [AVRGCCPLUGIN] nach - anwählbar im Flyout von [View]-[Toolbars], dort unter [Edit Current Configuration Options] - da kannst Du nachsehen oder dem Studio4 sagen, wie Du Deinen Controller taktest. Und die Fuses kannst Du lesen und setzen im Programmierfenster des Studio4 beim Reiter Fuses und Lockbits. Zum Setzen der Fuses gibts ne feine Hilfe, den Fusecalkulator (klick hier). (http://www.engbedded.com/fusecalc/) Und wenn Du Dich mit den fuses noch nicht auskennst, gibts z.B. hier ein Tutorial.

Viel Erfolg

leva87x
12.04.2012, 15:37
Hab jetzt eben nachgeschaut. Hab einen externen 12 Mhz quarz.Der auch unter AVR Studio eingestellt ist. Kann jedoch das Fuses menu nicht finden.22111

Hubert.G
12.04.2012, 15:41
Warum ladest du dein Programm nicht auch gleich mit dem AVR-Studio? Hier sind die Fuses schöner zum einstellen.

oberallgeier
12.04.2012, 15:51
Hab jetzt eben nachgeschaut. Hab einen externen 12 Mhz quarz ...So liebe ich es - oben ne Schaltung ohne Quarz posten, uns raten lassen was falsch sein könnte, und hinterher ist doch ein Quarz da . . . was ist dann an Deiner Schaltung überhaupt richtig ?

leva87x
12.04.2012, 21:41
Der Programmer hat einen 12 mhz quarz dran. Die zielschaltung ist siehe schaltung oben. Den Programmer meiner meinung nach kann man nicht aus avr programmieren @ hubert

Kampi
12.04.2012, 21:45
Der Programmer hat einen 12 mhz quarz dran. Die zielschaltung ist siehe schaltung oben. Den Programmer meiner meinung nach kann man nicht aus avr programmieren @ hubert

Was der Programmer für einen Quarz hat ist eigtl egal ;)
Was hast du für einen Programmer und hast du es mal mit AVR Studio probiert?

oberallgeier
12.04.2012, 22:07
Der Programmer hat einen 12 mhz quarz dran ...Ach Mist, da haben wir gründlich aneinander vorbeigeredet mit dem Quarz. Ja, das AVRLab von ulli hat nen 12 MHz-Quarz - der spielt hier keine Rolle, wie Kampi schon schrieb.

Und ich habe nen Fehler gemacht - hab Dir ein fuse-tutorial empfohlen und den link dazu vergessen. Hier ist der Link zu diesem fuse-Tutorial (klick hier - nun ists wirklich da). (http://www.wiki.elektronik-projekt.de/mikrocontroller/avr/fusebit_tutorial) Darin ist auch sehr schön erklärt und gezeigt, wie die fuse-Setzerei im AVRStudio läuft.

Entschuldige bitte meine Schludrigkeit.

Kampi
12.04.2012, 22:15
So ich hab mir mal dieses PDF

http://www.weigu.lu/a/pdf/USB_AVR_Lab.pdf

zu deinem Programmer durchgelesen. Da das Ding anscheinend einen AVR ISP mkII emuliert SOLLTE es auch von AVR Studio erkannt werden. Probier das mal aus. Eventuell musst du da noch was am Studio umstellen aber da kann man dir bei Bedarf noch genauere Infos geben.
Und anscheinend scheint er mit dem Studio 4 ja zu laufen (entnehme ich dem letzten Absatz auf der letzten Seite ;) )

oberallgeier
12.04.2012, 22:58
... USB_AVR_Lab ... durchgelesen ... anscheinend einen AVR ISP mkII emuliert ...Mit dem AVRLab von ulli arbeite ich seit Langem fast ausschließlich. Ich verwende das Ding eigentlich NUR als STK500-Clone. Natürlich sollte es nicht auf eine Programmierfrequenz von 1,8xx MHz eingestellt sein, wenn der Controller nur 1 MHz tickert - aber dann kommt üblicherweise (bei mir) eine Fehlermeldung.

EIN möglicher Fehler am Lab wäre natürlich, wenn es nach Erhalt noch garnicht geflasht wurde - das geht mit den online in ulli´s shop erhältlichen Tools total simpel. Zum "Zusammenbau" - sprich: bequarzen - und zum Flashen/Booten gibts ebenfalls online Anweisungen als PDF.

Hubert.G
13.04.2012, 09:56
Der Programmer hat einen 12 mhz quarz dran. Die zielschaltung ist siehe schaltung oben. Den Programmer meiner meinung nach kann man nicht aus avr programmieren @ hubert
Da hast du eine falsche Meinung von dem Programmer. Ich habe genau so einen und verwende ausschließlich das AVR-Studio. Er wird als STK500 erkannt.