AVR Arduino Nano PD0 & PD1

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

AVR Arduino Nano PD0 & PD1

Beitragvon Mathias » 5. Mai 2018, 16:17 AVR Arduino Nano PD0 & PD1

Dieser Mini-Code funktioniert wie erwartet, alle Pins von PORTD blinken. Dieser Code habe ich mit der Arduino-IDE hochgeladen.
Code: Alles auswählen
void setup() {
  DDRD = 255;
}
 
void loop() {
  PORTD = 255;
  delay(1000);         
  PORTD = 0;
  delay(1000);         
}


Setzt ich diesen Code in Pascal um, blinken die Pin PD0 & PD1 nicht.
PD2 bis PD7 blinken. Ich weis, PD0 und PD1 werden auch für TX & RX des UART gebraucht.
Code: Alles auswählen
begin
  DDRD := 255;
  repeat
    PORTD := 255;
    mysleep(sl);
 
    PORTD := 0;
    mysleep(sl);
  until 1 = 2;
end.

Was macht Arduino anders, da es dort funktioniert ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4105
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 6. Mai 2018, 07:07 Re: AVR Arduino Nano PD0 & PD1

Vorschlag: Schau dir im Datenblatt die Reset-Zustände der massgebenden Register der Portsteuerung an. Vielleicht macht die Arduino Firmware Initialisierungen die man nicht sieht.

Edit:
Hier:
http://ww1.microchip.com/downloads/en/D ... 01984A.pdf
http://ww1.microchip.com/downloads/en/D ... _d114e7448
http://ww1.microchip.com/downloads/en/D ... d114e19290
http://ww1.microchip.com/downloads/en/D ... d114e41465
Bit 4 – RXEN0
Receiver Enable 0
Writing this bit to one enables the USART Receiver. The receiver will override normal port operation for
the RxDn pin when enabled. Disabling the receiver will flush the receive buffer invalidating the FE0,
DOR0, and UPE0 flags.
Bit 3 – TXEN0
Transmitter Enable 0
Writing this bit to one enables the USART transmitter. The transmitter will override normal port operation
for the TxD0 pin when enabled. The disabling of the transmitter (writing TXEN0 to zero) will not become
effective until ongoing and pending transmissions are completed, i.e., when the transmit shift register and
transmit buffer register do not contain data to be transmitted. When disabled, the transmitter will no longer
override the TxD0 port.

Der Resetzustand von RXEN0 und TXEN0 ist 0 -> das dürfte nicht das Problem sein. Kontrolliere doch die beteiligten Register mit dem Debugger zur Laufzeit.
mse
 
Beiträge: 1946
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Mathias » 6. Mai 2018, 16:11 Re: AVR Arduino Nano PD0 & PD1

Der Resetzustand von RXEN0 und TXEN0 ist 0 -> das dürfte nicht das Problem sein.
Genau, dies war das Problem.
Danke.

Anscheinend lässt Avrdude dies beiden Register nach der Übertragung auf HIGH.
Mit folgendem Code, ist das Problem weg. 8)
Code: Alles auswählen
begin
  DDRD := 255;
  UCSR0B := 0;
  repeat

Ganz am Schluss von Init(), in der Datei wiring.c habe ich folgendes gefunden:
Code: Alles auswählen
   // the bootloader connects pins 0 and 1 to the USART; disconnect them
   // here so they can be used as normal digital i/o; they will be
   // reconnected in Serial.begin()
#if defined(UCSRB)
   UCSRB = 0;
#elif defined(UCSR0B)
   UCSR0B = 0;
#endif


PS: Dies werde ich im AVR-Tutorial aufnehmen. :wink:
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4105
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 6. Mai 2018, 16:18 Re: AVR Arduino Nano PD0 & PD1

Nach dem Schreiben des Programmes sollte unbedingt ein Reset ausgeführt werden. Es gibt noch viele weitere Register welche irgendwie gesetzt sein können...
mse
 
Beiträge: 1946
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Mathias » 6. Mai 2018, 16:23 Re: AVR Arduino Nano PD0 & PD1

Nach dem Schreiben des Programmes sollte unbedingt ein Reset ausgeführt werden.

Meinst du mit einer Init() procedure, welche alles zurücksetzt ?

Was ich noch festgestellt habe UCSR0B, muss im Bootloader gesetzt werden, weil das entfernen der Stromversorgung des Nanos bring nichts.
Averdude ist somit unschuldig.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4105
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 6. Mai 2018, 17:00 Re: AVR Arduino Nano PD0 & PD1

Mathias hat geschrieben:
Nach dem Schreiben des Programmes sollte unbedingt ein Reset ausgeführt werden.

Meinst du mit einer Init() procedure, welche alles zurücksetzt ?

Nein, ein Hardware reset, was aber nicht hilft, wenn der Bootloader nach dem Reset immer anläuft. In diesem Fall must du dich informieren, was der Bootloader sonst noch alles umstellt und wie du schreibst in einer Init() Prozedur rückstellen.
Kann man nicht auch die ICSP Schnittstelle zum Programmieren und Debuggen verwenden?
mse
 
Beiträge: 1946
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Mathias » 6. Mai 2018, 17:32 Re: AVR Arduino Nano PD0 & PD1

In diesem Fall must du dich informieren, was der Bootloader sonst noch alles umstellt

Am besten die Arduino-Source angucken.
In der schnelle habe ich dort gesehen, das an den Timern rum geschraubt wird und AD der AD-Wandler wird eingeschalten. Da sieht man, wieso man unter Arduino den Timer0 nicht nutzen kann.
Das einzig wichtige scheint UCSR0B zu sein, alles andere muss man sowieso konfigurieren, wen man es braucht ( Timer, AD-Wandler ).

Ich habe das Tutorial wegen UCSR0B angepasst.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4105
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried