mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tiny13 Verzweiflung 1.Klasse


Autor: Pier S. (bigpier)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bin am Verzweifeln! Ich habe für einen Tiny 13 ein "banales 
Programm"geschrieben aber anscheinend bin ich zu blöd um es zum laufen 
zu bringen!!! (Siehe Anhang)! Ich werwende das Avr Studio und gcc 
"1.6.2"
Die Fuse habe ich auf 9,6MHz gestellt !
Wenn ich das Program mit -Os kompilliere dan stimmt die geschwindikeit 
des Runleds exakt aber der rest des Programs sprich zeitverzögerung laüt 
nicht mehr !!
wenn ich hingegen mit -O0 kompillire stimmt die Zeit nicht überein aber 
der rest laäft !!
Der ADC läüft nie (möchte 0 bis 5 V einlesen )
wäre sehr nett wenn sich jemand den Code ansehen würde und mir sagen 
könnte was ich falsch mache !!!


Vielen Dank

Gruß
Pier

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Will man wirklich regelmässige Interrupt-Zeiten, dann sollte man den 
Timer im CTC Modus fahren. Sonst ist die Laufzeit des Handlers teilweise 
mit drin. Und die hängt vom Optimierungsgrad ab.

Und wenn du Pech hast, macht er einen Teil der Fliesskommarechnung + 
Integer-Umwandlung ohne Optimierung zur Laufzeit.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> return(ADC);
return ist keine Funktion. Der Operand von return wird nicht in 
Klammern eingeschlossen (auch wenn es trotzdem funktioniert).

> ADMUX &= 0b01100000; // Untere Bits löschen
Das steht im Artikel Bitmanipulation, wie man das besser (lesbarer) 
macht.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pier S. wrote:
> Wenn ich das Program mit -Os kompilliere dan stimmt die geschwindikeit
> des Runleds exakt aber der rest des Programs sprich zeitverzögerung laüt
> nicht mehr !!
> wenn ich hingegen mit -O0 kompillire stimmt die Zeit nicht überein aber
> der rest laäft !!

Dürfte das volatile Problem sein.

Mach mal Variablen, die in Main und Interrupts benutzt werden, volatile.


Peter

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 ADMUX &= 0b01100000; // Untere Bits löschen 
Lösch besser den Kommentar,
denn 0 110 0000 löscht auch das höchste Bit.

Autor: Pier S. (bigpier)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Tips!
Danke  Peter Dannegger
>Dürfte das volatile Problem sein.

>Mach mal Variablen, die in Main und Interrupts benutzt werden, volatile.
Hat mir geholfen !
Nun Hab ich noch das Problem mit dem ADC der will nicht

 void ADC_init(void)
{
  ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) ;  // ADC aktivieren und Prescaler auf 64
    //ADMUX |=  (1<<REFS0) ;   //vermutung !!!                  // externe Referenzspannung nutzen 
}

int read_ADC(char canal)
{
  ADMUX &= 0b01100000;                  // Untere Bits löschen 
  ADMUX+= canal;                                // Kanal waehlen
  ADCSRA |= (1<<ADSC);                  // eine Wandlung "single conversion"
  while ( ADCSRA & (1<<ADSC) );              // auf Abschluss der Konvertierung warten
  return ADC;        
}

der Aufruf dann so
  period = read_ADC(A_POTIEXT);

Was mach ich falsch

Danke Gruß

Pier

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.