Forum: Mikrocontroller und Digitale Elektronik AVR Butterfly; eigenes Programm funktioniert nicht


von Alla P. (alla)


Lesenswert?

Hallo,

ich will einfach einen Pin auf 1 stehen lassen, nachdem schon alles 
andere (RS232 Ausgabe) nicht funktioniert. Ich habe das AVR Programm 
genommen und alles rausgeschmissen, zur Zeit sieht main.c so aus:

void disable_JTAG(void)
{
  unsigned char sreg;

  sreg = SREG;
  cli();
  MCUCR |= ( 1 <<JTD );
  MCUCR |= ( 1 <<JTD );
  SREG = sreg;
}


int main(void)
{

    disable_JTAG();

  DDRF = ( 1 << PF4 );

    while (1)            // Main loop
    {
     PORTF |= (1<<PF4);
    }
}

Eigentlich müsste ich dabei am JTAG-Connector etwas messen können (Pin 1 
und 2 laut Schematic), aber da ist keine Spannung drauf.

Noch eine Frage: ich lade einfach mein Programm rein, ohne vorher zu 
resetten. AVRProg beschwert sich nicht und sagt, es wäre geladen. 
Probeweise habe ich auch die alte Software (Rev07) wieder so 
reingeladen, sie funktioniert dann auch.
Überall steht aber, man soll das Board vorher resetten??? Ich habe auch 
probiert, die Batterie raus- und reinstecken, der Port bleibt trotzdem 
auf 0.

Kann mir jemand helfen?

Vielen Dank, Alla

von Alla P. (alla)


Lesenswert?

Das Problem hat sich geändert:

erst lag es am Messgerät, hatte aus Versehen kein DC eingestellt. Jetzt 
zeigt er konstant Spannung an, allerdings auch wenn ich den Pin auf 0 
setze:

PORTF &= ~(1<<PF4);

Das mit Bootloader funktioniert beim Originalprogramm nicht einfach so, 
nur über "Jump to Bootloader", bei meinem Programm allerding ohne 
Probleme. Heisst es, dass evlt. das Programm gar nicht drin ist? Bzw. er 
ist noch im Bootloader?

LG Alla

von zwieblum (Gast)


Lesenswert?

wenn ich mich recht erinner kommt der butterfly erst in den bootloder 
mode, denn du einen reset gemacht hast und am joypad etwas drückst. ich 
vermute mal, dass dein programm gar nicht geladen wird. hast' ein oszi?

von Alla P. (alla)


Lesenswert?

Vielen Dank, das war die Lösung!

Das erklärt auch, warum ich AVRProg starten konnte! Diesmal geht es 
nämlich nur nach Reset (Batterie raus).

Es funktioniert jetzt!

Wie kann man denn einfach einen Reset machen, ohne an der Batterie zu 
fummeln?

LG Alla

von (prx) A. K. (prx)


Lesenswert?

Reset-Pin am ISP-Anschluss suchen und Taster dran.

von Alla P. (alla)


Lesenswert?

Danke, werde jemanden beauftragen (bin nicht so im Löten, reine SW :-)).

Jetzt hat sogar die serielle Übertragung geklappt (was zum Hyperterminal 
geschickt), kann ruhig Feierabend machen!

LG Alla

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

avrdude bietet eine Option für "Exit Programming Mode", Parameternamen 
grade nicht erinnerlich. Damit wird das entsprechende Kommando an den 
Bootloader gesendet und das Nutzerprogramm gestartet. Das spart 
zumindest das Joystick-Up zum Start des Programms. Falls man in die 
eigene Anwendung noch ein Enter Bootloader einbaut (WD-Reset aktivieren, 
wartet bis WD auslöst), kann man sich zusätzliche Lötarbeit sparen und 
muss dennoch keinen Reset per Strom-an/Strom-aus auslösen, um in den 
BL-Modus zu gelangen.

von Alla P. (alla)


Lesenswert?

Aber diesen Enter Bootloader muss man ja auch irgendwie auslösen und ich 
brauche zur Zeit überhaupt keinen Joystick. Sonst müsste ich dann auch 
die Tasten auswerten und noch abfragen, ob es nicht aus Versehen 
gedrückt wurde.

So ist es ja im Originalprogramm gelöst, da bietet es sich an, bei einem 
Menü... Diesen WD habe ich da schon gefunden.

Wir wollen mit dem µC eigentlich nur ein paar Daten aus dem Lasersensor 
abfragen und die auf den PC weiterschicken. Ganz simpel und dafür will 
ich keinen Aufwand mit Joystick usw betreiben.

Trotzdem danke, für die anderen ist es sicherlich interessant.

LG Alla

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.