Forum: Mikrocontroller und Digitale Elektronik AVR-ctrl Demoprogramm fehler?


von Georg R. (bambus)


Lesenswert?

Hallo!

Ich habe mir bei "http://www.mikrocontroller.com/de/avr-ctrl.php"; eine 
"AVR-Ctrl"-Platine bestellt, diese bestückt und da ich keine
Ahnung von der ganzen Materie habe, im Downloadbereich das Demo Programm 
"Demo1b" runtergeladen.
(Controller: Atmega32)
Weiters habe ich mir die neueste Version von WinAVR installiert, sowie 
PonyProg.

Als erstes habe ich natürlich versucht das Programm auf den Controller 
zu übertragen, und da ist auch schon mein Problem:

Überspiele ich die "AVRmain.hex" läuft alles einwandfrei.
Überspiele ich aber die "main.hex" flimmern nur ein Paar Buchstaben im 
Dislay, die vermuten lassen dass es ungefähr so was bedeuten sollte wie 
bei "AVRmain.hex".

Das wäre ja auch noch nicht so schlimm da ich ja nun weiß dass alles 
funktioniert, aber wenn ich das Programm umschreiben möchte

steht mir scheinbar nur die main-datei zur verfügung und selbst wenn ich 
nur text ändere passiert immer das was ich oben

beschrieben habe, flimmern!

wundert mich auch nicht denn wenn die Ursprungsdatei main.hex schon 
nicht funktioniert, warum sollte dann etwas anderes.

Hier jetzt meine Bitte:

kann das jemand nachvollziehen bzw. ausprobieren und mir dann bescheid 
geben.

Habe auch schon versucht mit einem kleinen Programm einfach alle PINs 
auf high zu setzten, und zwar so:

#include <avr/io.h>

int main (void)
{
 {
  DDRA = 0xff;
    PORTA = 0b11111111;

  DDRB = 0xff;
    PORTB = 0b11111111;

  DDRC = 0xff;
    PORTC = 0b11111111;

  DDRD = 0xff;
    PORTD = 0b11111111;
 }
}

Ich kanns einwandfrei copilieren und überspielen, aber passiert ist noch 
nichts, kein leuchten oder so?
mache ich einen sehr großen Fehler, oder wie müsste der Programmcode 
aussehen?
sollte ich überhaupt aufhören mit mikrocontrolllern zu experimentieren?
bitte bitte helft mir!!!

Georg

von holger (Gast)


Lesenswert?

> DDRA = 0xff;

Das setzt die Pins auf Eingang.
Ausgang geht so:

 DDRA = 0x00;

von Hans G. (Firma: ACC) (karlos5)


Lesenswert?

Nein, er setzt sie auf Ausgang ;)
Sollte funktionieren..zeig ma deine schaltung?

von Hans G. (Firma: ACC) (karlos5)


Lesenswert?

Proramm sollte so lauten

#include <avr/io.h>

void main (void)
{

while(1) //Ganz Wichtig!!!!!!
 {
  DDRA = 0xff;
    PORTA = 0b11111111;

  DDRB = 0xff;
    PORTB = 0b11111111;

  DDRC = 0xff;
    PORTC = 0b11111111;

  DDRD = 0xff;
    PORTD = 0b11111111;
 }

}

von holger (Gast)


Lesenswert?

>Nein, er setzt sie auf Ausgang ;)

Arrgh, jetzt war ich gerade wieder bei den PIC.
Muss das eigentlich jeder anders machen ;)

@ Georg
Ignoriere meinen Post :(

von holger (Gast)


Lesenswert?

>steht mir scheinbar nur die main-datei zur verfügung und selbst wenn ich
>nur text ändere passiert immer das was ich oben
>beschrieben habe, flimmern!

So ein Display flimmert gerne wenn man sowas macht:

 while(1)
  {
    Lösche Display
    Schreibe Text
  }

Der Text ist gerade geschrieben und dann wird er
sofort wieder gelöscht und neu geschrieben, und wieder
gelöscht......

von Teplotaxl X. (t3plot4x1)


Lesenswert?

Hmm.. Stöpsel mal den Programmer vom Prozessor ab, und guck, ob die 
Reset-leitung auf High liegt.

von Georg R. (bambus)


Lesenswert?

@Holger:  es ist nicht so ein Flimmern wie du denkst, es schreibt statt 
"holger Buss menue Demo" abwechselnd alle buchstben auf einem Zeichen 
manchal auch auf zwei oder mehr oder überhaupt nur irgendwelche wirren 
zeichen wie Fragezeichen, pfeile und punkte.

@Sir alan Teplotaxl: bin dabei dauert aber noch kurz

von Georg R. (bambus)


Lesenswert?

@Hans Ganz: Die Schaltung ist auf 
"http://www.mikrocontroller.com/de/avr-ctrl.php"; im unteren viertel der 
website.

von holger (Gast)


Lesenswert?

>@Holger:  es ist nicht so ein Flimmern wie du denkst, es schreibt statt
>"holger Buss menue Demo" abwechselnd alle buchstben auf einem Zeichen
>manchal auch auf zwei oder mehr oder überhaupt nur irgendwelche wirren
>zeichen wie Fragezeichen, pfeile und punkte.

Das ist auch kein Wunder wenn ich mir den Quellcode ansehe ;)
Der ist von 2005. Delays mit for() Schleifen in lcd.c. Herzlichen
Glückwunsch. Das klappt bei einem optimierenden Compiler nie.

Gleich zurückschicken das Teil und Geld zurück verlangen.

von Georg R. (bambus)


Lesenswert?

also meine Resetleitung liegt auf high! was heisst das jetzt?

von Georg R. (bambus)


Lesenswert?

Wie meinst du das, die Platine hat doch nichts damit zu tun wie ich 
meine Delays Programmier oder?

von Teplotaxl X. (t3plot4x1)


Lesenswert?

Das heißt, dass das Programm laufen sollte. Es soll auch schon fälle 
gegeben haben, bei denen der LPT-Progger Reset ständig auf low gezogen 
hat. Nen pullup ist dran? Du misst doch hoffentlich gegen GND ;)

von Georg R. (bambus)


Lesenswert?

Guten Morgen!

JA also Pullup is dran und gegen Masse habe ich auch gemessen.

Also vielleicht mach ich bei der Programmierung einen Fehler:

Programmers Notepad (PN) -> Programm schreiben
Mfile -> Makefile erstellen mit den Parametern:
 - main file name - main
 - MCU-type - Atmega32
 - Pogrammer - dt006
 - Port - Lpt1
PN -> Main compilieren
Mikrocontroller an Pc anschließen und die Stromversorgung einschalten
Ponyprog - Hex-file auf controller schreiben
ISP Kabel abstecken und eventuell den controller nochmal aus und 
einschalten (wohl eher nur aus hoffnung hatte noch keinen erfolg damit)

Der Fehler muss doch irgendwo bei der Programmierung liegen, sonst würde 
doch das Demoprogramm auch nicht funktionieren oder?

von Georg R. (bambus)


Angehängte Dateien:

Lesenswert?

Hier mal die Schaltung, kann es sein dass ich die Ausgänge alle auf low 
setzen muss damit das LED array leuchtet?

von holger (Gast)


Lesenswert?

>Hier mal die Schaltung, kann es sein dass ich die Ausgänge alle auf low
>setzen muss damit das LED array leuchtet?

Einfach mal ausprobieren?

von Georg R. (bambus)


Lesenswert?

Hallo alle Zusammen!

nach langem Studieren der Schaltung und einem Geistesblitz habe ich das 
LED Array umgedreht und siehe da kaum ist es nicht in Sperrichtung 
eingebaut funktioniert alles so wie es sollte!! zumindest alle Ausgänge 
auf 1 oder 0 setzen.

Danke für eure Hilfe und einen schönen Abend
wünscht euch Georg

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.