mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mysterium


Autor: Tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bei dieser Frage bin ich für jede Vermutung und Mutmaßung dankbar da es
eigentlich nicht erklärbar ist. (jedenfalls nicht für mich) Folgendes:
Wenn ich folgende Zeilen:

P_ENABLE = LOW;
P_CHIP1 = HIGH;
P_CHIP2 = HIGH;
P_DI   = HIGH;
P_RW  = LOW;
P_ENABLE = HIGH;
DATA =0x55;
P_ENABLE = LOW;


in meiner main-schleife ausführe funktioniert sie und ich erhalte
linien auf meinem Graphiksisplay. Packe ich das ganze jedoch in eine
Funktion und rufe diese auf kann ich dem Display zusehen wie es erst
einen Punkt zeichnet, dan eine Lücke, ein Punkt usw.
Ich verstehe das nicht. Timing? Villeicht hat jemand eine Idee.
Der gesammten Code ist im Anhang.
Danke!

Autor: Tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
sorry, hatte den code zwar noch ein wenig kommentiert aber nicht
gespeichert. Also nochmal.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, ich habe weitergeforscht und für mich wird es immer seltsamer. Habe
den code bis auf das nötigste gekürzt und mit dem oszi gemessen.
Bei diesem Programm:

#include <mega128.h>

void main(void)
{
PORTB=0xFF;
DDRB=0xFF;

while (1)
      {
      PORTB.0 =1;
      PORTB.0 =0;
      };
}
Messe Ich ein High Signal von 2µs und Low von 4µs periodisch . Das
Scheint in Ordnung zu sein. Nun aber kommt das seltsame. Bei diesem
Programm:

#include <mega128.h>

void port(void)
{
      PORTB.0 =1;
      PORTB.0 =0;
}

void main(void)
{
PORTB=0xFF;
DDRB=0xFF;

while (1)
      {
      port();
      };
}

messe ich ein periodisches signal mit einer Pulszeit von 7µs und einer
Pulspause von 25ms!!! fünfundzwanzig milisekunden! Kann sich das jemand
erklären? Ich nicht. Ich zweifle an meinem Verstand. Bitte um Hilfe!

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kommt mir so vor, als hättest du da eine schlechte Schwarzkopie am
Laufen?? Könnte das sein?

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Schwarzkopie von CodeVision? Ne das ist ne Professional Lizenz
meiner Techniker Schule. Und bissher hat mich der Compiler auch nicht
im Stich gelassen. Bei dem ATMega16 habe ich keine Probleme.
Gab es so ein Problem den schonmal?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau deine Symptome passieren, wenn du 2 Instanzen von CV startest,
dann von einem laufendem die Lizenz exportiertst. Scheinbar hat man
dann 2 Lizenzen, aber nur scheinbar...

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, ich bin vor einigen Tagen von Windows ME auf XP umgestiegen, habe
also auch CV neu instaliert. Die lizenz Datei hatte ich auf der
Festplatte gespeichert und habe sie ganz normal von dort importiert.
Kann man dabei etwas Falsch machen? Wie gesagt, beim ATMega16 und mit
meinem alten Betriebssystem hatte ich nie Probleme.
Was kann ich nun tun? Genügt eine Deinstalation und erneute
Installation um das Problem zu beseiteigen? Und was ist mit den bissher
geschrieben Projekten, sind die nun irgendwie "Gebrandmarkt" ?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
den Projekten passiert meiner Meinung nach nichts, wie auch?
Hast du denn die Originalinstallation auf dem ME-System noch?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

wie wärs wenn du dir einfach mal den ASM-Output des Compilers
anschaust? Falls der Compiler sowas nicht anbietet bleibt dir immer
noch der Weg über einen Disassembler (z.B. den des AVR Studio)

Matthias

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
den Projekten passiert meiner Meinung nach nichts, wie auch?
 -Bei den Eagle Dateien ist es so das man mit gecrackten Versionen
erstellte Dateien auch nicht mit legalen Versionen öffnen kann.
Hast du denn die Originalinstallation auf dem ME-System noch?
 -Nein, Festplatte formatiert, ich habe nur noch die Lizenz datei.
Habe jetzt berreits 2 mal ne Neuinstallation Versucht. Hat nix
gebracht.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na ja - ein eagle-file mit einem C-file zu vergleichen ist wie Äpfel und
Birnen...
C-Sourcen sind reine Textdateien, da passiert nichts.
Schreib Pavel Haiduc ne mail, schildere, was genau du gemacht hast,
auch wer Lizenznehmer ist, wird sich schon ne Lösung finden.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem C-File haste recht aber ich dachte auch an das
Projecktfile .prj und in der sind schon Programmspezifische
informationen drin. Aber ok, es würde wirklich keinen sinn machen den
das könnte mann leicht umgehen. Das mit der mail werde ich mal machen.

@Matthias, danke für den Tip. ich habe mir die assembler files
angekuckt, jedoch nichts auffälliges gefunden.
Hier das asm ohne Funktionsaufruf:

  .ORG 0x500
;       1
;       2
;       3
;       4
;       5 #include <mega128.h>
;       6
;       7
;       8
;       9 void main(void)
;      10 {

  .CSEG
_main:
;      11
;      12 PORTB=0xFF;
  LDI  R30,LOW(255)
  OUT  0x18,R30
;      13 DDRB=0xFF;
  OUT  0x17,R30
;      14
;      15 while (1)
_0x2:
;      16       {
;      17       PORTB.0 =1;
  SBI  0x18,0
;      18       PORTB.0 =0;
  CBI  0x18,0
;      19       };
  RJMP _0x2
;      20 }
_0x5:
  RJMP _0x5

und hier mit Funktionsaufruf:

  .ORG 0x500
;       1
;       2
;       3
;       4
;       5 #include <mega128.h>
;       6
;       7 void port(void)
;       8 {

  .CSEG
_port:
;       9   PORTB.0 =1;
  SBI  0x18,0
;      10         PORTB.0 =0;
  CBI  0x18,0
;      11 }
  RET
;      12
;      13 void main(void)
;      14 {
_main:
;      15
;      16 PORTB=0xFF;
  LDI  R30,LOW(255)
  OUT  0x18,R30
;      17 DDRB=0xFF;
  OUT  0x17,R30
;      18
;      19 while (1)
_0x3:
;      20       {
;      21       port();
  RCALL _port
;      22       };
  RJMP _0x3
;      23 }
_0x6:
  RJMP _0x6

Also wenn der Compiler tatsächlich was gemeines macht dan ist es hier
nicht ersichtlich, oder habe ich etwas übersehen?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

und wo ist der Rest(INT-Vektoren, Init, usw.)? Da dein ASM-Output ein
ORG 0x500 enthält muß das Programm ja irgendwie da hin kommen. Häng
doch mal die zwei HEX-Dateien an die der Compiler erzeugt.

Matthias

Autor: Tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Matthias: Hab ich weggelassen- sorry. Hab nun das ganze file angehängt.
Diese File ist mit Funktionsaufruf. Das ohne hänge ich im nächsten Post
noch an.

@crazy horse: Ich habe mir heute morgen die mühe gemacht auf einer
neuen Partition nochmals windows XP zu installieren und habe dort das
ganze mit der neusten Evaluation version von CV gestetet. Genau das
gleiche Problem. Ich halte es daher für unwarscheinlich das es an einer
ungültigen Lizenz liegt!?

Autor: Tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier das funktionierende Programm ohne Funktion.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

ich wollte das eingentlich durch den Simulator schicken. Da fehlen aber
noch irgendwelche Include-Files um das Ganze durch den Assembler zu
bringen. Schick doch einfach die HEX-Dateien.

Matthias

Autor: Tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem simulieren ist ne gute idee, habe ich auch grade selbst noch
gemacht. Im Simulator arbeitet das Programm prima. Langsam verzweifle
ich echt. Eigentlich ist in der Theorie alles in Ordung und es sollte
Fuktionieren aber was ich auf dem Oszi messe ist nunmal auch Tatsache.

Was auch noch interesannt ist, das Problem habe ich erst seit ich den
ATMega128 verwende. Ich habe eben nochmal das Programm mit dem ATMega16
getestet und nichts auffälliges gefunden. Ein hardware defeckt ist aber
auch unwarscheinlich. Habe es mit 2 unterschiedlichem Mega128 getestet.
Wers nicht glauben kann, den kann ich gut verstehen. Auf wunsch geb ich
meine Adresse raus, dann könnt ihr euch das selbst ankucken :)

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

ja dann. M103C-Fuse im Mega128 gesetzt. Dann krachts beim Rücksprung
aus der Funktion. Hätte ich auch gleich drauf kommen können.

Matthias

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BRRRRR, nein oder? So eine verdammte Fuse kostet mich 2 tage hartes
grübeln und zweifeln??? Danke Matthias, nun gehts tatsächlich!
Ist die fuse standartmäsig gesetzt und was bewirkt sie genau?

Nochmal vielen Dank, du hast meine Woche gerettet! :D

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.