ACD Atmega16 PortA als Eingang 0x00 setzen

OP #3879481
Lesenswert?
• ▲
▼
Hallo

mal eine Frage, wenn ich den ADC des ATmega 16 verwendne möchte und der 
Debugger zurückgibt, dass das Register ADCSRA nicht gefunden wird, kann 
das daran liegen, dass ich PortA nicht als Eingang (0x00) definiert 
habe?

Ist das notwendig oder warum wird das Register nicht erkannt:

Hier der C-Code fehlt da noch was?
1
#define F_CPU  4000000UL
2
#include <avr/io.h>
3
#include <stdio.h>
4
#include <avr/interrupt.h>
5
#include <util/delay.h>
6

7

8
int main(void)
9
{
10
  
11
  DDRB = 0xFF;
12
  unsigned char i;
13
  
14
  LCD_init();
15
  
16
  
17
  //Configure ADC
18
  //Enable interrupts function in ADC
19
  //8-Bit or 10-Bit results
20
  //1,000,000/50,000 =100/5=20 1,000,000/200,000 = 10/2 =5
21
  ADCSRA |= 1<<ADPS2;
22
  ADMUX |= 1<<ADLAR;
23
  ADCSRA |= 1<<ADIE;
24
  ADMUX |= 1<<REFS0;
25
  //Enable a prescaler-determine by the internal/external clock
26
  
27
  //Turn on the ADC feature
28
  ADCSAR |= 1<<ADEN;
29
  //Enable the global interrupts
30
  sei();
31
  //Start the first conversion
32
  
33
  ADCSRA |= 1<<ADSC;
34
  
35
  
36
  
37
  while(1)
38
  {
39
    //for(i=0;i<2;i++)
40
    LCD_blink();
41
    
42
    //PORTB = 0xFF;
43
    //_delay_us(1000);
44
    //PORTB = 0x00;
45
    //_delay_us(1000);
46
    
47
    //for(i=0;i<15;i++)
48
    //LCD_scroll(0);
49
    
50
    //for(i=0;i<4;i++)
51
    //LCD_scroll(1);
52
    
53
    //for(i=0;i<2;i++)
54
    //LCD_scroll(0);
55
  }
56
}
57

58

59
// Add the interrupt routine and display the results
60
ISR(ADC_vect)
61
{
62
  //LCD String variable declaration
63
  char adcResult[4];
64
  itoa(ADCH, adcResult, 10);
65

66

67
  //Convert the ADC Conversion result
68
  //Select a location on the LCD to display the number
69
  LCD_goto(1,1);
70
  //Display the string on the LCD
71
  //LCD_send_string(adcResult);
72
  LCD_send_command(adcResult);    
73

74

75
  ADCSRA |= 1<<ADSC;
76
  
77
}
78
void LCD_init()
79
{
80
  LCD_CNTRL_DDR = 0xFF;
81
  LCD_CNTRL_PORT = 0x00;
82
  LCD_DATA_DDR = 0xFF;
83
  LCD_DATA_PORT = 0x00;
84
  
85
  _delay_ms(50);
86
  //LCD_send_command(0x38);
87
  //LCD_send_command(0x0C);
88
  LCD_send_command(0x01);
89
  //LCD_send_command(0x0E);
90
  _delay_ms(1000);
91
  LCD_send_command(0x14);
92
  LCD_send_command(0x0F);
93
  //LCD_send_command(0x01);
94
   //_delay_ms(10);
95
  LCD_send_command(0xFF);
96
  
97
  //LCD_send_command(0x06);
98
     
99
}
100

101
void LCD_goto(unsigned char y, unsigned char x)
102
{
103
  unsigned char firstAddress[] = {0x80,0xC0,0x94,0xD4};
104
  
105
  LCD_send_command(firstAddress[y-1] + x-1);
106
  _delay_ms(10);
107
}
Gast #3879511
Lesenswert?
• ▲
▼
Hi

> ... wenn ich den ADC des ATmega 16 verwendne möchte und der
>Debugger zurückgibt, dass das Register ADCSRA nicht gefunden wird, kann
>das daran liegen, dass ich PortA nicht als Eingang (0x00) definiert
>habe?

Nein.

MfG Spess
Gast #3879590
Lesenswert?
• ▲
▼
>> ADCSAR |= 1<<ADEN;
>      ^^
>Aber wie kommst du darauf, dass das etwas mit dem Debugger zu tun haben
>könnte?

Das kann aber nicht durch einen Compiler gegangen sein.
Der hätte mit Fehler abgebrochen.

Wir sehen also mal wieder Sourcecode der mit dem Problem
nichts zu tun hat.
(Firma: Vescomp) #3879900
Lesenswert?
• ▲
▼
holger schrieb:
> Das kann aber nicht durch einen Compiler gegangen sein.
> Der hätte mit Fehler abgebrochen.
 Hat er wahrscheinlich auch mit so etwas wie:
 "error: 'ADCSAR' undeclared..."
 Dass der TO das falsch gelesen hat, wundert mich nicht, da er das
 auch falsch geschrieben hat.

> Wir sehen also mal wieder Sourcecode der mit dem Problem
> nichts zu tun hat.
 Nein, wir sehen mal wieder jemanden, der nicht imstande ist, die
 vom Compiler erzeugten Fehlermeldungen mitzuschicken.
 Dass etwas vom Compiler akzeptiert wird aber nicht vom Debugger, kann:
  a) Nicht sein.
  b) Falscher Typ im Debugger ausgewählt.
Gast #3880133
Lesenswert?
• ▲
▼
> Abartiger Humor
Ich will es erklären.

Der Fragende ist nicht einmal in der Lage, das allererste Wort richtig 
zu schreiben. Er benutzt ganz offensichtlich ein fremdes Programm, ohne 
Hinweis auf den Autor; schafft es irgendwie, dort einen Schreibfehler 
hineinzubringen, kann dann aber die Fehlermeldung nicht richtig lesen 
und wiedergeben.
So weit, so gut (bzw. schlecht).
Lustig fand ich nur, dass dies perfekt zu der hier im Forum 
vorherrschenden Meinung passt, dass Schreibfehler belanglos sind, es 
versteht ja ohnehin jeder, was gemeint ist.
Und dann kommt so ein tool und macht den Spielverderber.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.